You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly R实现:按标准差为正态分布数据直方图着色

为正态分布直方图按标准差区间着色的实现方案

我来帮你搞定这个按标准差区间给直方图着色的需求!下面是一个基于NumPy和Matplotlib的完整可运行方案,每一步都做了详细注释,方便你理解:

import numpy as np
import matplotlib.pyplot as plt

# 1. 生成正态分布样本数据(也可以替换成你自己的数据集)
np.random.seed(42)  # 设置随机种子保证结果可复现
data = np.random.normal(loc=0, scale=1, size=10000)  # 均值0,标准差1,10000个样本

# 2. 计算数据的均值和标准差,作为区间划分的依据
mean = np.mean(data)
std_dev = np.std(data)

# 3. 定义各个标准差区间的边界
sd1_low = mean - std_dev
sd1_high = mean + std_dev
sd2_low = mean - 2*std_dev
sd2_high = mean + 2*std_dev
sd3_low = mean - 3*std_dev
sd3_high = mean + 3*std_dev

# 4. 绘制直方图,同时获取柱子的关键信息(区间边界、高度、补丁对象)
n, bins, patches = plt.hist(data, bins=30, edgecolor='white')

# 5. 遍历每个柱子,根据所属区间分配对应颜色
for bin_left, bin_right, patch in zip(bins[:-1], bins[1:], patches):
    # 取柱子的中心位置判断所属区间(也可以用左右边界,效果差异不大)
    bin_center = (bin_left + bin_right) / 2
    if sd1_low <= bin_center <= sd1_high:
        patch.set_facecolor('#1f77b4')  # 1SD内:蓝色
    elif sd2_low <= bin_center <= sd2_high:
        patch.set_facecolor('#2ca02c')  # 1-2SD区间:绿色
    elif sd3_low <= bin_center <= sd3_high:
        patch.set_facecolor('#ff7f0e')  # 2-3SD区间:橙色
    else:
        patch.set_facecolor('#d62728')  # 超出3SD:红色(可选补充)

# 6. 添加图表标注和自定义图例
plt.title('Normal Distribution Histogram Colored by SD Intervals')
plt.xlabel('Value')
plt.ylabel('Frequency')

# 手动创建图例(因为柱子是逐个上色的,Matplotlib无法自动生成对应区间的图例)
from matplotlib.patches import Patch
legend_elements = [
    Patch(facecolor='#1f77b4', label='Within 1 SD'),
    Patch(facecolor='#2ca02c', label='1-2 SD'),
    Patch(facecolor='#ff7f0e', label='2-3 SD'),
    Patch(facecolor='#d62728', label='Beyond 3 SD')
]
plt.legend(handles=legend_elements)

# 显示最终图表
plt.show()

关键逻辑说明:

  • 区间划分:通过数据的均值和标准差计算出1/2/3倍标准差的边界,这是着色的核心依据。
  • 柱子着色:遍历每个直方图柱子,通过柱子中心位置判断其所属区间,再设置对应填充色。
  • 图例补充:由于直方图的颜色是逐个柱子设置的,无法自动生成区间图例,所以手动创建图例元素来明确颜色对应的区间范围。

如果你的数据不是标准正态分布,只需要替换data变量为你自己的数据集即可,核心着色逻辑完全通用。

内容的提问来源于stack exchange,提问作者Isaac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:12:47