绘制具有透明边缘的直方图

问题描述 投票:0回答:1

我想使用 Matplotlib 创建一个具有透明面颜色和边缘颜色的直方图。但是,edgecolor 关键字参数似乎不接受 alpha 值。我错过了什么,还是边缘颜色真的仅限于 alpha=1.0?

我想指定边缘颜色,因为我将图形保存为 SVG。如果没有指定的边缘颜色,SVG 的直方图条之间的边缘间隙很小,尽管它在

%matplotlib inline
显示中看起来不错。

#Create a histogram plot to visualize parameter distributions

def parameter_hist(dataframes, colors, parameter):

    fig, ax = plt.subplots(figsize=(10,10))
    
    for index, dataframe in enumerate(dataframes):
        color = colors[index]
        n, bins, patches = ax.hist(dataframe[parameter], bins=50, alpha=0.5, 
                                       color=color, edgecolor=color)
    
    plt.savefig(parameter+'_histogram.svg', dpi='figure')
    plt.show()
    
    return

parameter_hist([dataframe1, dataframe2, dataframe3], ['#003C86', '#00DCB5','#000000'],'gap')

我尝试直接向edgecolor提供alpha值,即:

edgecolor=color+'80'
但它似乎没有效果。

matplotlib histogram alpha
1个回答
0
投票

使用seaborn的直方图,您可以选择

element='step'
仅显示组合条形的轮廓。这消除了间隙。或者,您也可以将其与
lw=0
结合使用来删除轮廓。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

def parameter_hist(dataframes, colors, parameter):
    fig, ax = plt.subplots(figsize=(10, 10))

    for color, dataframe in zip(colors, dataframes):
        sns.histplot(x=dataframe[parameter], bins=50, alpha=0.5,
                     color=color, element='step', lw=0, ax=ax)

    plt.savefig(parameter + '_histogram.svg', dpi='figure')
    plt.show()
    return

dataframe1 = pd.DataFrame({'gap': np.random.randn(100000).cumsum()})
dataframe2 = pd.DataFrame({'gap': np.random.randn(200000).cumsum()})
dataframe3 = pd.DataFrame({'gap': np.random.randn(300000).cumsum()})
parameter_hist([dataframe1, dataframe2, dataframe3], ['#003C86', '#00DCB5', '#000000'], 'gap')

这就是 svg 在 Inkscape 中的外观:

svg of seaborn histogram with element=step

© www.soinside.com 2019 - 2024. All rights reserved.