我基于在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输出,一切正常,如下所示:
但是,SVG和PDF输出看起来像这样(显然,渐变并不局限于路径):
如何使SVG / PDF输出看起来像PNG输出?
答案 0 :(得分:1)
如果同一张图中有多个具有不同剪辑路径的图像,则需要将"image.composite_image"
参数设置为False
。
所以添加
plt.rcParams["image.composite_image"] = False
位于脚本顶部。