python - Seaborn 箱线图和线图显示不正确

标签 python seaborn overlay boxplot

我正在尝试将 seaborn 线图覆盖在 seaborn 箱线图上 结果有点“令人震惊”:) 看起来这两个图放在同一个图中但分开 箱形图在左侧压缩,线图在右侧压缩

请注意,如果我分别运行两个图表,它们就可以正常工作 我不知道如何让它工作 提前感谢您的帮助

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

mydata = pd.DataFrame({
    'a':[2012, 2012, 2012, 2012, 2013, 2013, 2013, 2013, 2014, 2014, 2014, 2014, 2015, 2015, 2015, 2015, 2016, 2016, 2016, 2016, 2017, 2017, 2017, 2017, 2018, 2018, 2018, 2018, 2019, 2019, 2019, 2019, 2020, 2020, 2020, 2020],
    'v':[383.00, 519.00, 366.00, 436.00, 1348.00, 211.00, 139.00, 614.00, 365.00, 365.00, 383.00, 602.00, 994.00, 719.00, 589.00, 365.00, 990.00, 1142.00, 262.00, 1263.00, 507.00, 222.00, 363.00, 274.00, 195.00, 730.00, 730.00, 592.00, 479.00, 607.00, 292.00, 657.00, 453.00, 691.00, 673.00, 705]
})

means =mydata.groupby('a').v.mean().reset_index()

fig, ax = plt.subplots(figsize=(15,8))
sns.boxplot(data=mydata, x='a', y='v', ax=ax, showfliers=False)
sns.lineplot(data=means, x='a', y='v', ax=ax)
plt.show()

最佳答案

令人惊讶的是,我没有找到这个问题的重复答案,所以我将我的评论提升为一个。站起来,先生评论:

您应该使用 pointplot 而不是 lineplot

...
sns.boxplot(data=mydata, x='a', y='v', ax=ax, showfliers=False)
sns.pointplot(data=means, x='a', y='v', ax=ax) 
plt.show()

示例输出:

enter image description here

Pointplot 相当于 lineplot对于用于 boxplot 的分类变量.请阅读here more about relational and categorical plotting .

问题来了,为什么lineplot对以下数据没有问题:

mydata = pd.DataFrame({'a':["m1", "m1", "m1", "m2", "m2", "m2", "m2", "m3", "m3", "m3", "m3", "m4", "m4", "m4", "m4"],     'v':[11.37, 11.31, 10.93, 9.43, 9.62, 6.61, 9.31, 11.27, 8.47, 11.86, 8.77, 8.8, 9.58, 12.26, 10] })  
means =mydata.groupby('a').v.mean().reset_index()  
print(means)
fig, ax = plt.subplots(figsize=(15,8)) 
sns.boxplot(data=mydata, x='a', y='v', ax=ax, showfliers=False) 
sns.lineplot(data=means, x='a', y='v', ax=ax) 
plt.show()

输出: enter image description here

不同的是这个例子对于lineplot没有任何歧义。 Seaborn lineplot 可以同时使用分类数据和数值数据。看起来,代码首先尝试将其绘制为数值数据,如果不可能,则将它们用作分类变量(我不知道源代码)。这可能是 seaborn 做出的一个很好的软件决定,因为另一种情况(不接受分类数据)会比人们尝试将分类数据和数值数据绘制到同一个图中的罕见情况引起更多的问题。不过,seaborn 的警告将是一件好事。

关于python - Seaborn 箱线图和线图显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65423023/

相关文章:

r - 用线条覆盖堆叠的 ggplot2 条形图的每个条形图

ios4 - 如何为 MKOverlay 区域显示标注?

python - 使用 `with` 语句关闭连接

Python端口转发

python - 如何使用 PyLZMA 的示例

python - Pandas+seaborn 多维数据框分面

python - 设置刻度标签的(有条件的)字体粗细

python - 如何仅绘制seaborn 热图的下三角?

css - 如何在不移动文本的情况下转换/过渡 div?

python - 使用 Python 和 suds 0.4 的 SAXParseException?