python - 如何在他们选择的 seaborn 分布图中添加垂直线?[单个图中的多个分布]
问题描述
使用这个问题的答案,我可以根据需要生成 dist 图。但是,当我想将相同的解决方案应用于多个绘图时,它似乎无法按预期工作。我正在寻找建议的解决方案。这是我正在尝试做的事情:
import seaborn as sns, numpy as np
from scipy import stats
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
sns.set(); np.random.seed(0)
data01 = np.random.normal(10, 5, 1000)
data02 = np.random.normal(20, 5, 1000)
ax1 = sns.distplot(data01, color = 'blue', kde = True)
x1 = ax1.lines[0].get_xdata()
y1 = ax1.lines[0].get_ydata()
plt.axvline(x1[np.argmax(y1)], color='blue')
ax2 = sns.distplot(data02, color = 'red', kde = True)
x2 = ax2.lines[0].get_xdata()
y2 = ax2.lines[0].get_ydata()
plt.axvline(x2[np.argmax(y2)], color='red')
plt.legend()
这是我得到的,这不是我所期望的(两条垂直线,每条一条):
解决方案
您需要使用正确的索引:索引0
用于蓝色 kde,索引1
用于蓝色垂直线,索引2
用于红色 kde。
直观地说,顾名思义,它为您提供了当前图形上所有线条ax2.lines
的集合。当您第二次绘图时,您已经有 2 行(前一个 kde 和垂直线),所以第二个 kde 的索引是因为在 python 中索引从 0 开始。这是因为您正在使用相同的图形对象,因此绘制的艺术家也将被转移到. 相反,如果你有单独的子图,那么你会为两者使用相同的索引distplot
kde=True
2
ax1
ax2
0
ax1 = sns.distplot(data01, color = 'blue', kde = True)
x1 = ax1.lines[0].get_xdata()
y1 = ax1.lines[0].get_ydata()
plt.axvline(x1[np.argmax(y1)], color='blue')
ax2 = sns.distplot(data02, color = 'red', kde = True)
x2 = ax2.lines[2].get_xdata() # <--- Use correct index 2 here
y2 = ax2.lines[2].get_ydata() # <--- Use correct index 2 here
plt.axvline(x2[np.argmax(y2)], color='red')
plt.legend()
推荐阅读
- node.js - 我如何将 node.js 15.10.0 下载到 mac
- python - Python:库是通过命令行安装的,但在 Spyder IDE 中不可用?
- micronaut - 基于用户类型的 micronaut 安全多登录控制器
- arrays - 加入 Array 中的 2 个项目并将其作为 Item 添加到同一数组中
- java - Opengl ES 1.0 教程中的代码不起作用(Java N-IDE)
- percentage - Tableau——计算条形图中嵌套维度的总计和总计百分比
- angular - Web应用程序离子框架角度中的公告横幅
- apache-spark - 不确定如何使用 pyspark 解决非确定性函数问题
- google-cloud-platform - Terraform:如何链接/链接从属 CA 到根 CA
- python - Pandas - 在屏蔽和 df.where 之后应用乘法