gpt4 book ai didi

python - 我如何将垂直线添加到他们选择的 seaborn dist 地 block ? [单个地 block 中的多个分布]

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:27 25 4
gpt4 key购买 nike

使用 this question 的答案我可以根据需要生成 dist 图。但是,当我想将相同的解决方案应用于多个地 block 时,它似乎并没有按预期工作。我正在寻求建议的解决方案。这是我正在尝试做的事情:

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

这是我得到的,这不是我所期望的(两条垂直线,每条垂直线):

enter image description here

最佳答案

您需要使用正确的索引:索引 0 用于蓝色 kde,索引 1 用于蓝色垂直线,索引 2 适用于红色 kde。

直觉上,顾名思义,ax2.lines 为您提供了当前图形上所有线 的集合。当您第二次使用 kde=True 绘制 distplot 时,您已经有 2 条线(之前的 kde 和垂直线),所以第二个 kde 的索引是 2 因为在 python 中索引从 0 开始。这是因为您正在使用相同的图形对象,因此从 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()

enter image description here

关于python - 我如何将垂直线添加到他们选择的 seaborn dist 地 block ? [单个地 block 中的多个分布],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56602094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com