Matplotlib - 保存绘图线条时去除背景和边框以及透明度8位alpha通道问题

5

我正在努力保存 matplotlib 中没有背景和边框的绘图。

  • 首先,我想要导出两种格式:
    • svg 格式,只包含绘图线条 (无背景、轴、框架或边框)
    • png 格式,具有透明背景并将边界框完全适配绘图。
  • 为了更加精确,我给出一个示例。
i = 1000
j = 1024
periods = 6
x = np.array([np.linspace(0, (2 * (periods) * np.pi), i)]).T
x = np.repeat(x, j, axis=1)
n = (1 * (np.random.normal(size=(j))) *
     np.random.uniform(low=1, high=1, size=j))[:, np.newaxis]
n = np.repeat(n, i, axis=1).T
y = np.sin(x) * (np.sin(n)+4) + 0.5 * n**2
xout = np.array([np.linspace(0, 2 * (2 * (periods) * np.pi), 2 * i)]).T
xout = np.repeat(xout, j, axis=1)
yout = np.concatenate((y, y[::-1]))
f1 = plt.figure("GOOD1")
plt.axis('off')
plt.plot(x, y, 'b', alpha=(0.015625))
plt.savefig("GOOD1.svg", bbox_inches='tight', transparent=True)
plt.savefig("GOOD1.png", bbox_inches='tight', transparent=True)

这看起来与我想要导出的内容相似,但是在png和svg图像中仍然有一个小空间;svg还具有背景。

第二个问题是关于alpha通道的。 我了解它被限制为8位,因此将alpha值降低得更多(如0.005)将使图形消失。 参考以前的代码,是否有一种方法可以以增加透明度的方式绘制更多的线条,而不会完全失去图形?

1个回答

6

我不确定如何回答你问题的第二部分。但我认为这段代码已经处理好了边框和背景的问题。

import numpy as np
import matplotlib.pyplot as plt

i = 1000
j = 1024
periods = 6
x = np.array([np.linspace(0, (2 * (periods) * np.pi), i)]).T
x = np.repeat(x, j, axis=1)
n = (1 * (np.random.normal(size=(j))) *
     np.random.uniform(low=1, high=1, size=j))[:, np.newaxis]
n = np.repeat(n, i, axis=1).T
y = np.sin(x) * (np.sin(n)+4) + 0.5 * n**2
xout = np.array([np.linspace(0, 2 * (2 * (periods) * np.pi), 2 * i)]).T
xout = np.repeat(xout, j, axis=1)
yout = np.concatenate((y, y[::-1]))

f1 = plt.figure("GOOD1")
ax = f1.add_subplot(111)
ax.axis('off')
ax.set_position([0, 0, 1, 1])
ax.plot(x, y, 'b', alpha=(0.015625))
ax.set_xlim((x.min(), x.max()))
ax.set_ylim((y.min(), y.max()))
f1.patch.set_alpha(0.)
ax.patch.set_alpha(0.)
f1.savefig("GOOD1.svg", bbox_inches=0, transparent=True)
f1.savefig("GOOD1.png", bbox_inches=0, transparent=True)

它运行良好。您能简要解释一下添加的功能吗? - Alex Pacini
1
ax.set_position 函数以 (left, bottom, width, height) 的格式设置 figure 坐标系中的坐标位置,因此在这里我们将坐标轴的位置设置为图形的左下角并填充整个图形。设置坐标轴限制确保跟踪填充整个坐标轴。将图形和坐标轴补丁设置为 alpha 0 可使背景透明化,同时适用于图形和坐标轴。最后,也可能是最重要的,将 bbox_inches 设置为 0 可使输出没有边框。 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接