Matplotlib堆叠条形图导出PDF/SVG时空条形细线去除求助
解决Matplotlib堆叠条形图空条形导出PDF/SVG出现细线的问题
你遇到的是Matplotlib矢量图渲染的常见问题——空条形(值为0)即使设置了linewidth=0,在PDF/SVG导出时仍可能因为矢量路径的细微残留出现细线。以下是几种实用的解决方法:
方法1:过滤空值后再绘制
从根源上避免生成空的条形元素,只绘制有实际数值的部分:
# 生成过滤掩码,只保留非0值的条目 mask = [v != 0 for v in values] # 过滤对应的数据 filtered_elements = [e for e, m in zip(elements, mask) if m] filtered_values = [v for v, m in zip(values, mask) if m] filtered_colors = [c for c, m in zip(colors, mask) if m] filtered_bottom = [b for b, m in zip(bottom, mask) if m] # 绘制过滤后的条形图 barlist = ax.bar(filtered_elements, filtered_values, bottom=filtered_bottom, label=i, width=0.8, linewidth=0) for index, bar in enumerate(barlist): bar.set_color(filtered_colors[index])
方法2:给空条形设置完全透明
如果需要保留条形的布局或图例,可以将值为0的条形设置为完全透明,包括边缘色:
barlist = ax.bar(elements, values, bottom=bottom, label=i, width=0.8, linewidth=0) for index, bar in enumerate(barlist): if values[index] == 0: # RGBA格式,最后一位0表示完全透明 bar.set_color((0, 0, 0, 0)) bar.set_edgecolor((0, 0, 0, 0)) else: bar.set_color(colors[index])
方法3:调整矢量图渲染参数
通过Matplotlib的全局参数简化矢量路径,减少细微线条的生成:
import matplotlib as mpl # 开启路径简化 mpl.rcParams['path.simplify'] = True # 设置简化阈值,值越高简化程度越强 mpl.rcParams['path.simplify_threshold'] = 0.1
内容的提问来源于stack exchange,提问作者nrom
相关产品推荐
相关产品推荐

