具有两个y轴的Seaborn位移

2024-09-29 00:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何使用Seaborn的displaot创建一个带有两个y轴的直方图:一个显示计数,另一个显示相应的密度?我尝试了此代码,但结果没有意义:

ax = sns.distplot( df_flavors.Freq, kde = False )
ax.set_title( 'Distribution of Flavor Purchases\nNumber Purchased', fontsize = font_title )
ax.set( ylabel = 'Count', xlabel = 'Number of Flavors Purchased' )
ax.set_xticks( range( n ))
ax.set_xticklabels( range( n ) )
##
ax2 = plt.twinx()

数据框df_flavors是一个有2000条记录的大型数据框,每条记录显示人们购买了多少种不同口味的酸奶(0-7种口味)。这些人是一项n=2000的调查的受访者。可变频率是每个响应者的计数。sns.distplot生成左轴上的计数;没关系。ax2=plt.twinx()生成第二个y轴,但不是该轴上的百分比,而是累积百分比;那不好。有什么建议可以让2000年的总人口的百分比或密度在右边


Tags: ofdftitlerangepltax密度计数
1条回答
网友
1楼 · 发布于 2024-09-29 00:15:24

在一个轴上,可以绘制没有kde的直方图。另一方面,kde没有直方图。左y轴包含计数,右y轴包含密度

import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt

# generate some random test data
y = np.abs(np.random.normal(np.random.choice([5, 9, 15], 2000, p=[3/9, 5/9, 1/9]), 2, 2000))

ax = sns.distplot(y, kde=False)
ax.set_title('Distribution of Flavor Purchases\nNumber Purchased')
ax.set(ylabel='Count', xlabel='Number of Flavors Purchased')
n = 20
ax.set_xticks(range(n))
ax.set_xticklabels(range(n))

ax2 = plt.twinx()
ax2 = sns.distplot(y, kde=True, hist=False, ax=ax2)
ax2.set_ylabel('density')
plt.show()

example plot

相关问题 更多 >