我有对照组和治疗组的数据。 matplotlib是否能够创建条形图,其中条形高度是每个组的平均值与该组中的各个数据点重叠的值?我想可视化实际数据点的分布,类似于显示的here

我曾考虑过将箱线图和散点图结合使用,但我的尝试并未成功。

最佳答案

这是一种完全按照您所说的解决方案:将条形图与散点图重叠。

当然,您可以进一步调整图的位置:图标题,轴标签,颜色,宽度,散点图的标记形状...

import matplotlib.pyplot as plt
np.random.seed(123)

w = 0.8    # bar width
x = [1, 2] # x-coordinates of your bars
colors = [(0, 0, 1, 1), (1, 0, 0, 1)]    # corresponding colors
y = [np.random.random(30) * 2 + 5,       # data series
    np.random.random(10) * 3 + 8]

fig, ax = plt.subplots()
ax.bar(x,
       height=[np.mean(yi) for yi in y],
       yerr=[np.std(yi) for yi in y],    # error bars
       capsize=12, # error bar cap width in points
       width=w,    # bar width
       tick_label=["control", "test"],
       color=(0,0,0,0),  # face color transparent
       edgecolor=colors,
       #ecolor=colors,    # error bar colors; setting this raises an error for whatever reason.
       )

for i in range(len(x)):
    # distribute scatter randomly across whole width of bar
    ax.scatter(x[i] + np.random.random(y[i].size) * w - w / 2, y[i], color=colors[i])

plt.show()


它将产生此图

10-06 05:18
查看更多