在Python中,我有一个数据框
df
,其中包含列x
、class
、ratio
和cnt
。
我之前通过聚合一些数据获得了这个数据,所以我知道每个
(x, class)
对都有一个唯一的行。我的想法是,我想看到每个 ratio
的 cnt
和 x
被 class
分割。
要显示
ratio
,我想使用条形图,要显示 cnt
,我想使用线图。这应该在双轴上完成。
根据我读到的类似问题的许多答案,我尝试了以下方法:
plt.figure(figsize=(15,8))
ax1 = sns.barplot(x="x", y="ratio", hue="class", data=df)
ax2 = ax1.twinx()
sns.pointplot(x="x", y='cnt', data=df, hue="class", color='red', ax=ax2)
ax2.grid(False)
问题是,这给出的输出并不是我真正需要的,因为这输出了很多行,每行一行
class
。
我想要的是为
cnt
的所有值都有一个独特的线图。我不太关心用 class
分割线图。我这样做只是为了确保标记出现在每个栏顶部的正确位置。但这不是我得到的输出。
感谢您的时间和帮助!
默认情况下,
sns.pointplot()
使用较小的“闪避”距离。添加 dodge=0.4
可能适合您的情况。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
plt.figure(figsize=(15, 8))
ax1 = sns.barplot(x="day", y="total_bill", hue="sex", errorbar=None, data=tips, palette='spring')
ax2 = ax1.twinx()
sns.pointplot(x="day", y='tip', data=tips, hue="sex", dodge=0.4, palette='winter', legend=False, ax=ax2)
plt.show()