Мені потрібно побудувати окуляри на диплотросі Seaborn, що відповідає певним значенням X, такими, що вони потрапляють як на криву щільності, так і нижче. Ось дистрибутив з наступної URL-адреси: З сайту Seaborn - дирплот приклади
Ось зображення з кодом:
Так, наприклад, у сюжеті, показаному вище, мені потрібнощоб програмно визначити, що таке значення осі Y, яке відповідає значенням X, яке потрапляє на криву густини. З малюнка, здається, це десь близько 0,37. Як це можна отримати в моїй програмі?
Припустимо, що це може бути зроблено, то як я можу його показатив представленому зображенні, тобто, який рядок коду покаже це. Я перекладаю набір візуалізацій R до Python. Наступний зразок у R показує те, що я намагаюся досягти:
Дивіться пункти, показані на кривій? Є багато точкових значень, які слід накреслити, але якщо ви допоможете мені накреслити одне, я спробую зробити все інше. Я починаю користуватися пакетами Matplotlib та Seaborn.
Відповіді:
2 для відповіді № 1Щоб отримати координату y для точки на кривій kde distplot, ви можете використовувати основні дані кривої. Ви можете отримати дані з графічного рядка за допомогою get_data
метод лінії Потім ви можете інтерполювати дані в потрібних точках, використовуючи, наприклад, дані. numpy.interp
.
import seaborn.apionly as sns
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
x = np.random.randn(100)
ax = sns.distplot(x, hist_kws={"ec":"k"})
data_x, data_y = ax.lines[0].get_data()
xi = 0 # coordinate where to find the value of kde curve
yi = np.interp(xi,data_x, data_y)
print ("x={},y={}".format(xi, yi)) # prints x=0,y=0.3698
ax.plot([0],[yi], marker="o")
plt.show()
Запитання про те, як отримати це рішення, запитують:
Почніть з проблеми. У нас є диплат, і ми хочемо визначити точку в певній точці її кривої kde.
- Подивіться на документацію; чи має функція distplot аргумент, який робить те, що ми хочемо? На жаль ні.
- Чи повертає функція об'єкт? Так. Це крива? На жаль ні. Замість цього це - осі matplotlib (виявляючи це з
type()
) - Дізнайтеся, що таке matplotlib осі; читати документація. Uff, це досить важко, але ми спотикаємося з методом
axes.get_lines()
; оскільки крива повинна бути лінією, яка повинна допомогти. - Дізнайтеся, які ці рядки: вони
Line2D
об'єкти Знову дивлячись на документацію, ми виявили, що існує методget_data
. Отже, тепер у нас є дані кривої. Чудово! - На цьому етапі було б ще краще, якщо б ми мали функцію, яку ми могли б назвати нашим x-значенням, щоб отримати відповідне значення y. Тепер, схоже, ми повинні знайти цю функцію самі.
- Так що дано
x
іy
дані кривої, як ми знаходимо y-значення заданого значення x? Оскільки дані дискретні, нам потрібно інтерполювати. Озираючись на "інтерполяцію" і "python" в кінцевому підсумку приносить намnumpy.interp
. Таким чином, це дає нам координати, які нам потрібно накреслити. - Дізнайтеся, як зробити точку. Ну, це просто. Багато прикладів для цього навколо.
Це воно.