我看到了和这个完全一样的问题:Matplotlib Plots Lose Transparency When Saving as .ps/.eps除了我试图输出到PDF而不是ps/eps。
上一个问题的答案指出,eps不支持透明度,并建议光栅化或另存为PDF。当我保存为png时,我确实得到了正确的输出,所以看起来好像matplotlib正确地处理了透明度,但后端失败了。显然PDF * 确实 * 支持透明度,所以我尝试使用的格式没有问题。
我在OS X(约塞米蒂)上运行,使用默认的MacOSX matplotlib后端,并使用matplotlib 1.4.1。有没有什么原因,为什么这个设置应该无法产生透明的PDF输出?
这在过去是可行的(OS X Mavericks和早期版本的matplotlib),但我不确定到底是什么变化导致了这个问题。
如果运行以下代码,则可以在with_hatch. pdf中看到问题,但在任何其他输出文件中都看不到问题。
#! /usr/bin/env python
import matplotlib.pyplot as plt
fig = plt.figure( figsize=(6, 6), dpi=100, facecolor='white' )
ax = fig.add_axes( [0.15, 0.1, 0.8, 0.85] )
bin_edges = [0.0, 0.5, 0.5, 1.0, 1.0, 1.5, 1.5, 2.0, 2.0, 2.5, 2.5, 3.0, 3.0, 3.5, 3.5, 4.0, 4.0, 4.5, 4.5, 5.0, 5.0, 5.5, 5.5, 6.0, 6.0, 7.0, 7.0, 8.0]
y_low = [0.9581631739289882, 0.9581631739289882, 0.8966054746563691, 0.8966054746563691, 0.8369962202270926, 0.8369962202270926, 0.7824880045351325, 0.7824880045351325, 0.7231695683685057, 0.7231695683685057, 0.6673767757896321, 0.6673767757896321, 0.6083447707111752, 0.6083447707111752, 0.5602384968623321, 0.5602384968623321, 0.5109567893600544, 0.5109567893600544, 0.4707872827805316, 0.4707872827805316, 0.4304527769718274, 0.4304527769718274, 0.39024135798617826, 0.39024135798617826, 0.3593458738615755, 0.3593458738615755, 0.3275704585658484, 0.3275704585658484]
y_high = [0.9762065896798683, 0.9762065896798683, 0.9227253843496172, 0.9227253843496172, 0.8738222849514, 0.8738222849514, 0.8299500683866315, 0.8299500683866315, 0.7810616940586165, 0.7810616940586165, 0.7357506442258693, 0.7357506442258693, 0.6852756294051707, 0.6852756294051707, 0.6441575476130643, 0.6441575476130643, 0.5987788803224889, 0.5987788803224889, 0.5630257208701298, 0.5630257208701298, 0.5274860424153797, 0.5274860424153797, 0.4915335923551736, 0.4915335923551736, 0.46502435263727837, 0.46502435263727837, 0.43196895235913746, 0.43196895235913746]
ax.fill_between( bin_edges, y_low, y_high, facecolor='green', edgecolor='white', alpha=0.4 )
plt.savefig( 'without_hatch.pdf' )
plt.savefig( 'without_hatch.png' )
ax.fill_between( bin_edges, y_low, y_high, facecolor='green', edgecolor='white', hatch='xxxx', alpha=0.4 )
plt.savefig( 'with_hatch.pdf' )
plt.savefig( 'with_hatch.png' )
现在提交到matplotlib bug tracker:https://github.com/matplotlib/matplotlib/issues/3841
3条答案
按热度按时间dfddblmv1#
解决问题?
1)您可能可以导出为支持Alpha的PNG,然后将其 Package 在PDF中,但您仍然会丢失所有的线条艺术,而支持栅格化图像......可能不是你想要的
2)如果不同的图层具有不同的Alpha设置,您可以将各个图层渲染为单独的PDF,然后导入它们并将其 Package 在PDF原生Alpha中。这需要一些适度的PDF-fu,但应该是可行的。另一方面,如果alpha值在给定区域内变化,这将不起作用。
ycl3bljg2#
在设置要具有透明度的轴之后和保存图形之前添加此行:
这在MacOS Big Sur上的Python 3中工作。
此方法的文档可以在here中找到。
x9ybnkn63#
在过去7年的某个时候,这个问题在
matplotlib
中得到了解决。参见matplotlib GitHub上的讨论:https://github.com/matplotlib/matplotlib/issues/3841。