matplotlib 将轮廓添加到并排显示多个直方图的图中

polhcujo  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在使用matplotlib创建一个包含多个直方图的图。我的图使用的模板代码是here。我试图画出直方图的轮廓,所以我修改了for循环中的代码,以包含edgecolor参数,如下所示:

for x_loc, binned_data in zip(x_locations, binned_data_sets):
    lefts = x_loc - 0.5 * binned_data
    ax.barh(centers, binned_data, height=heights, left=lefts, edgecolor='k')

但我最终结果是一个有垂直线的图:plot有没有办法去掉垂直线,只保留轮廓?(顺便说一下,我的图表看起来与示例不同,因为我使用了不同的数据,但代码基本相同。

ars1skjm

ars1skjm1#

出现垂直线是因为正在为没有数据的条柱绘制边线(值binned_data item == 0)
您可以使用布尔掩码,使ax.barh()仅为具有数据的对象绘图。
使用您发送的相同for循环段:

for x_loc, binned_data in zip(x_locations, binned_data_sets):
    # boolean mask for just plotting those with values > 0
    draw_line_mask = binned_data>1
    
    lefts = x_loc - 0.5 * binned_data
    
    # filter data using mask
    ax.barh(
        centers[draw_line_mask],
        binned_data[draw_line_mask],
        height=heights[draw_line_mask],
        left=lefts[draw_line_mask],
        edgecolor='k')

输出图形:

相关问题