/ / Python Seaborn Distplot Y значення, яке відповідає заданому значенню X - python, matplotlib, plot, point, seaborn

Значення Python Seaborn Distplot Y, що відповідає заданому значенню X - python, matplotlib, plot, point, seaborn

Мені потрібно побудувати окуляри на диплотросі 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.

  1. Подивіться на документацію; чи має функція distplot аргумент, який робить те, що ми хочемо? На жаль ні.
  2. Чи повертає функція об'єкт? Так. Це крива? На жаль ні. Замість цього це - осі matplotlib (виявляючи це з type())
  3. Дізнайтеся, що таке matplotlib осі; читати документація. Uff, це досить важко, але ми спотикаємося з методом axes.get_lines(); оскільки крива повинна бути лінією, яка повинна допомогти.
  4. Дізнайтеся, які ці рядки: вони Line2D об'єкти Знову дивлячись на документацію, ми виявили, що існує метод get_data. Отже, тепер у нас є дані кривої. Чудово!
  5. На цьому етапі було б ще краще, якщо б ми мали функцію, яку ми могли б назвати нашим x-значенням, щоб отримати відповідне значення y. Тепер, схоже, ми повинні знайти цю функцію самі.
  6. Так що дано x і y дані кривої, як ми знаходимо y-значення заданого значення x? Оскільки дані дискретні, нам потрібно інтерполювати. Озираючись на "інтерполяцію" і "python" в кінцевому підсумку приносить нам numpy.interp. Таким чином, це дає нам координати, які нам потрібно накреслити.
  7. Дізнайтеся, як зробити точку. Ну, це просто. Багато прикладів для цього навколо.

Це воно.