微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 Y 轴或颜色条的 Pandas 直方图

如何解决带有 Y 轴或颜色条的 Pandas 直方图

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

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'],'year':np.arange(start=1900,stop=2900,step=1),'Data':np.random.uniform(0,1,"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',by="Category1",ylim='own',figsize=(14,10),legend=True,alpha=0.4)

enter image description here

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

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,colormap = cmap,alpha=0.4)
fig.colorbar(sm,ax=axes,label="density")

enter image description here

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

enter image description here

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。