我有一个在x轴上带有定性变量的图,并使用sns.stripplot
列出了每个类别的垂直散点。我想指出每个类别的平均值。每个类别的平均y值处可能有一条短的水平线。我该怎么办?
答案 0 :(得分:1)
您可以将matplotlib.pyplot.hlines
与行的宽度和位置进行簿记。这是使用tips
原始数据集的示例
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
tips = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", data=tips)
labels = [e.get_text() for e in plt.gca().get_xticklabels()]
ticks = plt.gca().get_xticks()
w = 0.1
for day, idx in enumerate(labels):
idx = labels.index(day)
plt.hlines(tips[tips['day'] == day]['total_bill'].mean(), ticks[idx]-w, ticks[idx]+w)
plt.show()
labels = [e.get_text() for e in plt.gca().get_xticklabels()]
从sns.stripplot
自动生成的滴答标签中提取文本,这比tips['day'].unique()
更有用,因为标签的顺序不一定与tips['day'].unique
返回的顺序匹配。这是因为如果未指定order
参数,则顺序将是
[...]从数据对象推断出来。
plt.hlines(tips[tips['day'] == day]['total_bill'].mean(), ticks[idx]-w, ticks[idx]+w)
在“条”的中心并在列w*2
的平均值的高度处绘制长度为'total_bill'
的水平线,其中该行的'day'
值等于当日。