我想使用 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'
但它似乎没有效果。
使用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 中的外观: