python - 直接保存时,Matplotlib 未正确渲染曲线下的渐变
问题描述
我正在使用我从以下获得的一些示例代码: https ://stackoverflow.com/a/29331211/9469766
我正在尝试另存为 pdf,但每当我这样做时,渐变颜色的格式都不正确。但是,如果我只是显示而不是保存文件或将文件另存为 .png,则渐变会正确显示。这让我相信它的 .pdf 格式就是问题所在。保存为 pdf 时是否需要设置特定参数?
预期图像输出:
实际图像输出
我的代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from matplotlib.patches import Polygon
np.random.seed(1977)
import os
def main():
home_dir = os.path.expanduser('~/Desktop/test2.pdf')
x, y = generate_data(100)
for _ in range(5):
gradient_fill(*generate_data(100))
# plt.show()
plt.savefig(home_dir, rasterized = True, dpi=300)
plt.close()
def generate_data(num):
x = np.linspace(0, 100, num)
y = np.random.normal(0, 1, num).cumsum()
return x, y
def gradient_fill(x, y, fill_color=None, ax=None, **kwargs):
"""
"""
if ax is None:
ax = plt.gca()
line, = ax.plot(x, y, **kwargs)
if fill_color is None:
fill_color = line.get_color()
zorder = line.get_zorder()
alpha = line.get_alpha()
alpha = 1.0 if alpha is None else alpha
z = np.empty((100, 1, 4), dtype=float)
rgb = mcolors.colorConverter.to_rgb(fill_color)
z[:,:,:3] = rgb
z[:,:,-1] = np.linspace(0, alpha, 100)[:,None]
xmin, xmax, ymin, ymax = x.min(), x.max(), y.min(), y.max()
im = ax.imshow(z, aspect='auto', extent=[xmin, xmax, ymin, ymax],
origin='lower', zorder=zorder)
xy = np.column_stack([x, y])
xy = np.vstack([[xmin, ymin], xy, [xmax, ymin], [xmin, ymin]])
clip_path = Polygon(xy, facecolor='none', edgecolor='none', closed=True)
ax.add_patch(clip_path)
im.set_clip_path(clip_path)
ax.autoscale(True)
return line, im
main()
解决方案
问题与https://github.com/matplotlib/matplotlib/issues/7151中的问题相同。
解决方法是使用"image.composite_image"
rc 参数并将其设置为 False。
plt.rcParams["image.composite_image"] =False
推荐阅读
- python - 使用 python cgi 创建 JSON 只返回一行
- dart - 在 Flutter 中更改 TextField 装饰 onFocus
- javascript - 将图像添加到每个图像之间的时间间隔的类
- python - 如何在 tkinter 中将图像设置为背景?
- python - QWebEngineUrlRequestInterceptor 不工作
- google-apps-script - 如果用户删除了附加组件的权限,则停止可安装触发器
- android - Android Studio 主题编辑器不显示预览?
- scrapy - Scrapy:保存网站
- python-3.x - ImportError:PYTHON FLASK 中没有名为“flask_jwt_extended”的模块
- sparql - 如何使用 SPARQL 从 DBpedia 中提取数据