python - Seaborn 箱线图和线图未正确显示
问题描述
我正在尝试将 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()
解决方案
令人惊讶的是,我没有找到这个问题的重复答案,所以我将我的评论提升为一个。起来,先生 评论:
而不是lineplot
,您应该使用pointplot
...
sns.boxplot(data=mydata, x='a', y='v', ax=ax, showfliers=False)
sns.pointplot(data=means, x='a', y='v', ax=ax)
plt.show()
样本输出:
Pointplot 等效于lineplot
用于 的分类变量boxplot
。请在此处阅读有关关系和分类绘图的更多信息。
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()
不同的是,这个例子没有任何歧义lineplot
。Seabornlineplot
可以同时使用分类数据和数值数据。看起来,代码首先尝试将其绘制为数值数据,如果这不可能,则将它们用作分类变量(我不知道源代码)。这可能是 seaborn 的一个很好的软件决策,因为另一种情况(不接受分类数据)会比人们试图将分类数据和数值数据绘制到同一个图中的罕见情况造成更多的问题。不过,seaborn 的警告将是一件好事。
推荐阅读
- python - 排序方法在 3.x python 中的工作方式与 2.x 不同
- excel - 如何计算两列中满足条件的行数?
- angular - 如何使用命令更改 CLI 或角度版本
- node.js - 有没有办法在 node.js 中操作 gif?
- bash - 在 bash 中获取 Curl 返回码,如 200
- php - 与 POS 终端连接
- docker - Docker compose - 带有命令行工具的容器
- excel - 如何在公式单元格中隐藏公式的值
- c# - 如何使用 Google.Apis.CloudScheduler.v1beta1 客户端库在 .NET 中创建作业?
- c# - 创建问题 Jira REST API(400 错误请求)