渐变不限于PDF和SVG输出中的路径

时间:2019-07-12 09:07:46

标签: python pdf matplotlib svg gradient

我基于在Stackoverflow上发现here的示例,使用渐变填充路径。

我想出的代码如下:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.patches import PathPatch
from matplotlib.colors import LinearSegmentedColormap

csmap = LinearSegmentedColormap.from_list('mycmap', ['blue', 'yellow', 'green'])

fig = plt.figure() 
ax = fig.add_subplot(111, aspect='equal') 

# 1
path = Path([[0,0],[0,1],[1,0],[0,0]])
patch = PathPatch(path, facecolor='none')
ax.add_patch(patch) 
Z, Z2 = np.meshgrid(np.linspace(0,1), np.linspace(0,1))
im = plt.imshow(Z-Z2, interpolation='bilinear', cmap=csmap,
                origin='lower', extent=[0.1, 0.9, 0.1, 0.7], # Distance Left,Right,bottom,top
                clip_path=patch, clip_on=True)
im.set_clip_path(patch)

#2 
path = Path([[1,1],[1,2],[2,1],[1,1]])
patch = PathPatch(path, facecolor='none')
ax.add_patch(patch) 
Z, Z2 = np.meshgrid(np.linspace(0,1), np.linspace(0,1))
im = plt.imshow(Z-Z2, interpolation='bilinear', cmap=csmap,
                origin='lower', extent=[1, 2, 1, 2], #X,Y & Y,X
                clip_path=patch, clip_on=True)
im.set_clip_path(patch)


ax.set_xlim((0,3)) 
ax.set_ylim((0,3)) 
# Save plot
plt.savefig("output.svg", figsize=(24,12))
plt.savefig("output.png", figsize=(24,12))
plt.savefig("output.pdf", figsize=(24,12))
plt.show()

对于PNG输出,一切正常,如下所示:

enter image description here

但是,SVG和PDF输出看起来像这样(显然,渐变并不局限于路径):

enter image description here

如何使SVG / PDF输出看起来像PNG输出?

1 个答案:

答案 0 :(得分:1)

如果同一张图中有多个具有不同剪辑路径的图像,则需要将"image.composite_image"参数设置为False

所以添加

plt.rcParams["image.composite_image"] = False

位于脚本顶部。