Matplotlib绘制带透明边缘的直方图问题求助
解决Matplotlib直方图透明边缘+SVG无缝隙问题
核心问题解析
alpha参数仅控制填充色的透明度,边缘色的透明度得用**edgealpha**单独设置,别在edgecolor里硬拼alpha值- 保存SVG必须指定
edgecolor,否则柱子间会出现缝隙,这是SVG矢量图的渲染特性导致的
直接可用的修改方案
用edgealpha参数单独控制边缘透明度,既满足填充和边缘都透明,又能解决SVG缝隙问题,修改后的代码如下:
# 创建直方图可视化参数分布 def parameter_hist(dataframes, colors, parameter): fig, ax = plt.subplots(figsize=(10,10)) for index, dataframe in enumerate(dataframes): color = colors[index] # 新增edgealpha参数控制边缘透明度,和填充alpha保持一致(也可单独设不同值) n, bins, patches = ax.hist(dataframe[parameter], bins=50, alpha=0.5, color=color, edgecolor=color, edgealpha=0.5) plt.savefig(parameter+'_histogram.svg', dpi='figure') plt.show() return parameter_hist([dataframe1, dataframe2, dataframe3], ['#003C86', '#00DCB5','#000000'],'gap')
备选方案:用8位十六进制颜色(Matplotlib 2.0+支持)
如果你偏好直接用带alpha的颜色值,可采用8位十六进制格式(#RRGGBBAA,最后两位是alpha的十六进制值,比如80对应0.5透明度),代码示例:
def parameter_hist(dataframes, colors, parameter): fig, ax = plt.subplots(figsize=(10,10)) for index, dataframe in enumerate(dataframes): base_color = colors[index] # 拼接alpha值(80对应0.5透明度) color_with_alpha = base_color + '80' # 这里无需alpha参数,直接用带alpha的颜色 n, bins, patches = ax.hist(dataframe[parameter], bins=50, color=color_with_alpha, edgecolor=color_with_alpha) plt.savefig(parameter+'_histogram.svg', dpi='figure') plt.show() return
注意点
edgealpha是Matplotlib官方参数,比手动拼接颜色值更可靠,优先推荐使用- 8位十六进制颜色需确保Matplotlib版本在2.0及以上,旧版本不支持该格式
内容的提问来源于stack exchange,提问作者Vanessa King
相关产品推荐
相关产品推荐

