matplotlib - 保存没有背景和边框的绘图线和透明度8位alpha通道问题

时间:2016-02-11 17:47:19

标签: python svg matplotlib png

我正在努力从没有背景和边框的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位,因此将α值稍微降低(至0.005)将使图形消失。 参考前面的代码,是否有一种方法可以绘制更多的线条,增加透明度而不会丢失情节?

1 个答案:

答案 0 :(得分:4)

我不确定如何回答你问题的第二部分。不过,我相信这段代码可以解决边界和背景问题。

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)