Python Seaborn Distplot Y valor correspondiente a un valor X dado

Necesito trazar puntos en un mapa de puntos Seaborn correspondiente a ciertos valores de X, de manera que caigan en la curva de densidad o debajo de ella. Aquí hay un punto de referencia de la siguiente URL: Desde el sitio de Seaborn: ejemplos de punto de referencia

Aquí hay una imagen con el código:

introduzca la descripción de la imagen aquí

Entonces, por ejemplo, en el gráfico que se muestra arriba, necesito determinar programáticamente cuál es el valor del eje Y correspondiente al valor X de 0 que cae en la curva de densidad. De la figura, parece que está en algún lugar alrededor de 0.37. ¿Cómo puedo obtener eso en mi progtwig?

Suponiendo que se puede hacer, entonces, ¿cómo puedo mostrarlo en el gráfico que se muestra, es decir, qué línea de código lo mostrará? Estoy traduciendo un conjunto de visualizaciones de R a Python. La siguiente ttwig en R muestra lo que estoy tratando de lograr:

introduzca la descripción de la imagen aquí

¿Ves los puntos que se muestran en la curva? Hay muchos valores de puntos para dibujar, pero si me ayudas a dibujar uno, puedo intentar hacer el rest. Soy un usuario principiante de los paquetes de Matplotlib y Seaborn.

introduzca la descripción de la imagen aquí

Para obtener la coordenada y para un punto en la curva kde del punto de referencia, puede usar los datos subyacentes de la curva. Puede obtener los datos de la gráfica de líneas usando el método get_data de la línea. Luego puede interpolar los datos en los puntos en los que está interesado, utilizando, por ejemplo, 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() 

Preguntándose en los comentarios sobre cómo obtener esta solución:

Comience con el problema. Tenemos un punto de referencia y queremos dibujar un punto en un punto determinado de su curva kde.

  1. Mira la documentación; ¿La función distplot tiene un argumento que hace lo que queremos? Lamentablemente no.
  2. ¿La función devuelve un objeto? Sí. ¿Es la curva? Lamentablemente no. En cambio, es un eje de matplotlib. (descubriendo que con type() )
  3. Averigua qué es un eje de matplotlib; lea la documentación . Uff, es bastante pesado, pero nos axes.get_lines() con un método axes.get_lines() ; Ya que la curva debe ser una línea, eso debería ayudar.
  4. Descubre qué son esas líneas: son objetos de Line2D . De nuevo mirando la documentación encontramos que hay un método get_data . Así que ahora tenemos los datos de la curva. ¡Genial!
  5. En este punto, sería aún mejor si tuviéramos una función a la que pudiéramos llamar con nuestro valor x para recibir el valor y correspondiente. Ahora parece que tenemos que encontrar esa función por nosotros mismos.
  6. Entonces, dados los datos x e y de la curva, ¿cómo encontramos el valor y de un valor x dado? Como los datos son discretos, necesitamos interpolar. Buscar “interpolar” y “python” nos lleva a numpy.interp . Así que esto nos proporciona las coordenadas que necesitamos para dibujar un punto.
  7. Descubre cómo dibujar un punto. Bueno, eso es fácil. Un montón de ejemplos para eso alrededor.

Eso es.