1

在 Pandas 中,我试图生成一个显示密度值的 Ridgeline 图(作为 Y 轴或颜色斜坡)。我正在使用 Joyplot,但任何其他替代方式都可以。因此,首先我创建了 Ridge 图来显示每种条件的不同分布图(您可以使用此代码重现它):

import pandas as pd
import joypy
import matplotlib 
import matplotlib.pyplot as plt 

    df1 = pd.DataFrame({'Category1':np.random.choice(['C1','C2','C3'],1000),'Category2':np.random.choice(['B1','B2','B3','B4','B5'],1000),
                    'year':np.arange(start=1900, stop=2900, step=1),
                    'Data':np.random.uniform(0,1,1000),"Period":np.random.choice(['AA','CC','BB','DD'],1000)})
data_pivot=df1.pivot_table('Data', ['Category1', 'Category2','year'], 'Period')
fig, axes = joypy.joyplot(data_pivot,  column=['AA', 'BB', 'CC', 'DD'], by="Category1", ylim='own', figsize=(14,10), legend=True,  alpha=0.4)

在此处输入图像描述

所以它会生成图形但没有我想要的 Y 轴。因此,基于这篇文章,我可以添加一个颜色渐变,它既没有意义也没有显示每行上不同类别的分布图之间的差异:) ...

ar=df1['Data'].plot.kde().get_lines()[0].get_ydata() ## a workaround to get the probability values to set the colorramp max and min
norm = plt.Normalize(ar.min(), ar.max())
original_cmap = plt.cm.viridis
cmap = matplotlib.colors.ListedColormap(original_cmap(norm(ar)))
sm = matplotlib.cm.ScalarMappable(cmap=original_cmap, norm=norm)
sm.set_array([])
# plotting .... 
fig, axes = joypy.joyplot(data_pivot,colormap = cmap , column=['AA', 'BB', 'CC', 'DD'], by="Category1", ylim='own', figsize=(14,10), legend=True,  alpha=0.4)
fig.colorbar(sm, ax=axes, label="density")

在此处输入图像描述

但我想要的是这些数字中的任何一个(最好是带有颜色斜坡):

在此处输入图像描述 在此处输入图像描述

4

0 回答 0