我正在用西伯恩的histplot函数绘制两个直方图.第一个直方图代表我的整个数据集,而第二个是第一个的子集.然而,第二个直方图似乎并不像预期的那样与第一个重叠.下面是我使用的代码:

import numpy as np
from scipy.stats import norm

data = np.sin(np.arange(0, 6*np.pi, 0.1)) * 100
sns.scatterplot(x=[np.mean(data)], y=[0])
sns.lineplot(data)

population_size = 10000
sample_size = 100
total_means = []
for x in range(population_size):
    total_means.append(np.mean(np.random.choice(data, 100)))

total_means = np.array(total_means)
sns.histplot(total_means, kde=True)

# Q. Find the range for 68% of data will lie in that interval
from scipy.stats import norm
z1 = norm.ppf(.50 - .68/2)
se = np.array(data).std() / sample_size ** .5
x1 = z1 * se + np.array(data).mean()
z2 = norm.ppf(.50 + .68/2)
x2 = z2 * se + np.array(data).mean()
print(x1, x2)

plt.xticks(np.arange(total_means.min(), total_means.max(), 10))
plt.xticks(np.arange(0, 500, 100))
sns.histplot(total_means, kde=True)
sns.histplot(total_means[(total_means >= x1) & (total_means <= x2)], kde=True, color='r')

在Stack Overflow上,建议避免发布完整的代码.然而,我有一些数据可以用来快速解决问题,而无需生成新数据.

在我的代码中,最后两行画了两个直方图.然而,从结果图中可以看出,这些直方图并不像预期的那样重叠.

sns.histplot(total_means, kde=True)
sns.histplot(total_means[(total_means >= x1) & (total_means <= x2)], kde=True, color='r')

Histogram graph

推荐答案

问题是,对于红色图,使用了较小的箱(默认值通过np.histogram_bin_edges()计算).越小的箱意味着每个箱得到的值就越少.

下面是一些代码,用于显示使用默认值和使用两个直方图相同值之间的区别.子集的第一个和最后一个bin小于较大直方图的那些,因为bin边缘不符合子集的极限.

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

total_means = np.random.randn(2000)

fig, (ax1, ax2) = plt.subplots(ncols=2)

sns.histplot(total_means, kde=True, ax=ax1)
sns.histplot(total_means[(total_means >= -1) & (total_means <= 1)], kde=True, ax=ax1)
ax1.set_title('default bins')

bins = np.linspace(total_means.min(), total_means.max(), 30)
sns.histplot(total_means, bins=bins, kde=True, ax=ax2)
sns.histplot(total_means[(total_means >= -1) & (total_means <= 1)], bins=bins, kde=True, ax=ax2)
ax2.set_title('same bins for both')

plt.show()

sns.histplot with same bins

Python相关问答推荐

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

计算相同形状的两个张量的SSE损失

多处理代码在while循环中不工作

Pandas 在最近的日期合并,考虑到破产

Pandas - groupby字符串字段并按时间范围 Select

发生异常:TclMessage命令名称无效.!listbox"

如何在Python脚本中附加一个Google tab(已经打开)

numpy卷积与有效

如果条件不满足,我如何获得掩码的第一个索引并获得None?

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

如何合并两个列表,并获得每个索引值最高的列表名称?

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

幂集,其中每个元素可以是正或负""""

基于Scipy插值法的三次样条系数

用两个字符串构建回文

没有内置pip模块的Python3.11--S在做什么?

对数据帧进行分组,并按组间等概率抽样n行

将Pandas DataFrame中的列名的长文本打断/换行为_STRING输出?

如何将django url参数传递给模板&S url方法?