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

如何在Matplotlib violinplot的X轴显示频率值?

在Matplotlib小提琴图的X轴显示频率

Matplotlib默认的violinplot以分组索引作为X轴(单组数据时显示1),要改成显示频率,核心思路是先统计数据的频率分布,再将X轴的刻度或位置映射到频率值。以下是两种实用方案:

方案1:单组数据X轴展示频率统计信息

如果是单组数据,我们可以先统计数据的频率分布,再替换X轴的刻度标签,展示频率的关键信息:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.normal(size=100)

# 分箱统计频率(计数)
counts, bins = np.histogram(data, bins=10)
# 计算相对频率(占比)
rel_freqs = counts / len(data)

# 绘制小提琴图
plt.violinplot(data)

# 修改X轴标签为频率统计结果
plt.xticks([1], [f"频率范围: {rel_freqs.min():.2f}-{rel_freqs.max():.2f}\n峰值频率: {rel_freqs.max():.2f}"])
plt.xlabel("频率(相对占比)")
plt.ylabel("数据值")
plt.show()

方案2:多组数据X轴直接对应频率计数

如果有多组数据,想要让每组小提琴图的X轴位置直接对应该组的样本计数(频率),可以通过positions参数指定X轴位置:

import numpy as np
import matplotlib.pyplot as plt

# 生成3组不同样本量的数据集
data_groups = [
    np.random.normal(size=50),
    np.random.normal(size=100),
    np.random.normal(size=150)
]

# 计算每组的样本计数(作为频率指标)
freq_counts = [len(group) for group in data_groups]

# 以频率值作为X轴位置绘制小提琴图
plt.violinplot(data_groups, positions=freq_counts)

# 设置X轴刻度与标签
plt.xticks(freq_counts, [str(count) for count in freq_counts])
plt.xlabel("样本计数(频率)")
plt.ylabel("数据值")
plt.grid(axis='x', alpha=0.3)
plt.show()

补充说明

  • 你可以调整np.histogram的bins参数来改变分箱数量,适配不同的数据分布。
  • 若需要展示绝对频率(原始计数),直接使用counts即可,无需除以总样本数。
  • 多组场景下,positions参数可以自由指定小提琴图的X轴位置,完全匹配你的频率需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:03:24