/ / Python Seaborn Distplot Hodnota Y zodpovedajúca danej hodnote X - python, matplotlib, plot, bod, sea buzz

Python Seaborn Distplot Hodnota Y zodpovedajúca zadanej hodnote X - python, matplotlib, plot, bod, sea buzz

Potrebujem vykresliť body na rozbuške morušového, čo zodpovedá určitým hodnotám X tak, že spadajú buď na krivku hustoty alebo pod ňou. Tu je distplot z nasledujúcej adresy URL: Z lokality Seaborn - príklady rozptýlenia

Tu je obrázok s kódom:

tu zadajte popis obrázku

Takže napríklad v spise, ktorý som uviedol vyššie, potrebujemurčiť programovo, čo je hodnota osi Y zodpovedajúca hodnote X 0, ktorá spadá na krivku hustoty. Z obrázka sa zdá, že je niekde okolo 0,37. Ako to môžem získať v mojom programe?

Za predpokladu, že je to možné, potom ako to môžem zobraziťv zobrazenom grafe, t.j. aký riadok kódu to ukáže. Prekladám súbor R vizualizácií do Pythonu. Nasledujúci príbeh v R ukazuje, čo sa snažím dosiahnuť:

tu zadajte popis obrázku

Pozrite sa na body zobrazené na krivke? Existuje veľa bodových hodnôt, ktoré sa majú čerpať, ale ak mi pomôžete čerpať jeden, môžem sa pokúsiť urobiť zvyšok. Som začiatočníkom oboch balíčkov Matplotlib a Seaborn.

odpovede:

2 pre odpoveď č. 1

tu zadajte popis obrázku

Aby ste získali súradnicu y pre bod na krivke kde v distplot, môžete použiť základné údaje krivky. Dáta môžete získať z čiarového grafu pomocou get_data metódu linky. Môžete potom interpolovať údaje v bodoch, ktoré vás zaujímajú, napr. 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()


Spýtal sa v komentároch o tom, ako získať toto riešenie:

Začnite s týmto problémom. Máme rozruch a chceme nakresliť bod v určitom bode jeho krivky kde.

  1. Pozrite sa na dokumentáciu. má funkcia distplot argument, ktorý robí to, čo chceme? Bohužiaľ nie.
  2. Funkcia vráti objekt? Áno. Je to krivka? Bohužiaľ nie. Namiesto toho to je matplotlib osi (zistenie, že sa s type())
  3. Zistite, aké sú osi matplotlib; prečítať dokumentáciu, Uff, je to dosť ťažké, ale narazíme na metódu axes.get_lines(); pretože krivka by mala byť čiarou, ktorá by mala pomôcť.
  4. Zistite, aké sú tieto riadky: Sú Line2D objektov. Znovu pri pohľade na dokumentáciu zisťujeme, že existuje metóda get_data, Teraz máme údaje o krivke. Skvelé!
  5. V tomto bode by bolo ešte lepšie, keby sme mali funkciu, ktorú by sme mohli zavolať s našou hodnotou x, aby sme získali zodpovedajúcu hodnotu y. Teraz sa zdá, musíme túto funkciu nájsť sami.
  6. Takže x a y údaje o krivke, ako nájdeme hodnotu y danej hodnoty x? Keďže údaje sú diskrétne, musíme ich interpolovať. Hľadáte okolo "interpolovať" a "python" nakoniec nás prináša numpy.interp, Takže to nám poskytuje súradnice, ktoré potrebujeme na to, aby nakreslili bod.
  7. Zistite, ako nakresliť bod. No, to je jednoduché. Veľa príkladov pre to okolo.

To je to.