繁体   English   中英

使用matplotlib同时绘制两个直方图时,不透明度会产生误导

[英]Opacity misleading when plotting two histograms at the same time with matplotlib

假设我有两个直方图,并使用hist参数设置不透明度:'alpha = 0.5'

我已经绘制了两个直方图但我得到了三种颜色! 从不透明的角度来看,我理解这是有道理的。

但! 向某人展示三种颜色的两件事的图表是非常令人困惑的。 我可以以某种方式将每个箱子的最小条形设置在前面而没有不透明度吗?

示例图

在此输入图像描述

处理这个问题的通常方法是使图表有一些小的分离。 plt.hist被赋予多组数据时,默认情况下plt.hist

import pylab as plt

x = 200 + 25*plt.randn(1000)
y = 150 + 25*plt.randn(1000)
n, bins, patches = plt.hist([x, y])

例1

你可以用它来堆叠它们(这可以使用参数histtype='barstacked'在上面完成),但请注意排序是不正确的。

这可以通过单独检查每对点来确定哪个更大,然后使用zorder来设置哪个点是第一个来zorder 为简单起见,我使用上面代码的输出(例如,n是x和y的每个bin中的点数的两个堆叠数组):

n_x = n[0]
n_y = n[1]
for i in range(len(n[0])):
    if n_x[i] > n_y[i]:
        zorder=1
    else:
        zorder=0
    plt.bar(bins[:-1][i], n_x[i], width=10)
    plt.bar(bins[:-1][i], n_y[i], width=10, color="g", zorder=zorder)

这是结果图像: 在此输入图像描述

通过改变这样的顺序,图像看起来非常奇怪,这可能就是为什么它没有实现并需要黑客来做它。 我会坚持使用小分离方法,任何习惯这些图的人都假设它们采用相同的x值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM