在海洋分类图中绘制类别均值

时间:2020-01-09 04:31:17

标签: python matplotlib scatter-plot

我有一个在x轴上带有定性变量的图,并使用sns.stripplot列出了每个类别的垂直散点。我想指出每个类别的平均值。每个类别的平均y值处可能有一条短的水平线。我该怎么办?

1 个答案:

答案 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()

enter image description here


一些说明

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'值等于当日。