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

Gradient not confined to path in PDF and SVG output

我正在根据我在 Whosebug 上找到的示例用渐变填充路径。

我想出的代码如下:

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 输出一切正常,如下所示:

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

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

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

所以添加

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

在你的脚本之上。