如何在Matplotlib中无alpha绘制置信区间并导出EPS格式
解决Matplotlib绘制置信区间不支持EPS透明度的问题
EPS格式不支持透明度(alpha参数),可以用以下两种方案替代原透明填充的视觉效果:
方案1:低饱和度纯色填充
直接使用与曲线同色系的浅色调填充,无需alpha参数,视觉效果和透明填充接近,且完美兼容EPS。
代码示例
import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import to_rgba # 模拟数据 x = np.linspace(0, 10, 100) y1 = np.sin(x) y1_upper = y1 + 0.3 y1_lower = y1 - 0.3 y2 = np.cos(x) y2_upper = y2 + 0.3 y2_lower = y2 - 0.3 # 精准匹配原alpha=0.2的纯色:通过to_rgba计算后提取RGB分量 color1 = "#1f77b4" fill_color1 = "#{:02x}{:02x}{:02x}".format(*(int(255*c) for c in to_rgba(color1, 0.2)[:3])) color2 = "#ff7f0e" fill_color2 = "#{:02x}{:02x}{:02x}".format(*(int(255*c) for c in to_rgba(color2, 0.2)[:3])) plt.figure(figsize=(8, 4)) # 绘制无透明度的填充区间 plt.fill_between(x, y1_lower, y1_upper, color=fill_color1) plt.fill_between(x, y2_lower, y2_upper, color=fill_color2) # 绘制曲线 plt.plot(x, y1, color=color1, linewidth=2) plt.plot(x, y2, color=color2, linewidth=2) plt.xlabel("X") plt.ylabel("Y") plt.title("置信区间(纯色填充适配EPS)") # 保存为EPS格式 plt.savefig("confidence_interval_solid.eps", format="eps") plt.show()
方案2:图案填充(Hatch)
用斜线、点等图案替代透明填充,EPS完全支持hatch参数,且在黑白打印场景下辨识度更高。
代码示例
import matplotlib.pyplot as plt import numpy as np # 模拟数据 x = np.linspace(0, 10, 100) y1 = np.sin(x) y1_upper = y1 + 0.3 y1_lower = y1 - 0.3 y2 = np.cos(x) y2_upper = y2 + 0.3 y2_lower = y2 - 0.3 plt.figure(figsize=(8, 4)) # 用不同图案区分两条曲线的置信区间,无透明度 plt.fill_between(x, y1_lower, y1_upper, color="white", edgecolor="#1f77b4", hatch="//", linewidth=0.5) plt.fill_between(x, y2_lower, y2_upper, color="white", edgecolor="#ff7f0e", hatch="\\", linewidth=0.5) # 绘制曲线 plt.plot(x, y1, color="#1f77b4", linewidth=2) plt.plot(x, y2, color="#ff7f0e", linewidth=2) plt.xlabel("X") plt.ylabel("Y") plt.title("置信区间(图案填充适配EPS)") # 保存为EPS格式 plt.savefig("confidence_interval_hatch.eps", format="eps") plt.show()
补充说明
- 方案1中用
to_rgba计算的纯色可以精准匹配原alpha=0.2的视觉效果; - 方案2的
hatch样式有多种可选://、\\、.、xx、++等,可根据需求调整。
内容的提问来源于stack exchange,提问作者Tom M. Ragonneau
相关产品推荐
相关产品推荐

