pythonmatplotlibseabornkdeplot

How to extract xvalues and yvalues from a kdeplot


Given that I have a seaborn.kdeplot I want to extract the x and y points. Based on similar questions I have tried the following:

points = sns.kdeplot(targets, shade=True, label='train').get_lines()[0].get_data()
x      = points[0]
y      = points[1]

But I'm getting the error

Traceback (most recent call last):
  File "<string>", line 10, in <module>
IndexError: list index out of range

I'm using seaborn==0.12.2 and matplotlib==3.7.1


Solution

  • Because you request shade=True (use fill=True in the latest seaborn versions), the output axes object does not contain a Line2D object (it instead contains a PolyCollection). If you remove the shade=True, you be able to extract the data in the way that you give:

    ax = sns.kdeplot(targets, label='train')
    points = ax.get_lines()[0].get_data()
    x = points[0]
    y = points[1]