我目前正在尝试减少散点图的文件大小。我的代码如下:
plt.scatter(a1,b1)
plt.savefig('test.ps')
其中a1,b1是大小为400,000左右的数组,它的文件大小为7.8MB。
我尝试过添加
plt.rcParams['path.simplify'] = True
在这段代码之前,但文件仍为7.8MB。这是一个问题,它如何保存为“.ps”文件或其他问题?
答案 0 :(得分:2)
你可以考虑使用例如browserify ./app.js -o bundle.js -t [ babelify --presets react ]
- 当你有一个密集的点集时,我特别喜欢这个,因为它更好地指出你的数据集中在哪里。例如:
hexbin
从左图中,我可以得出结论,import numpy as np
import matplotlib.pylab as pl
x = np.random.normal(size=40000)
y = np.random.normal(size=40000)
pl.figure()
pl.subplot(121)
pl.scatter(x, y)
pl.xlim(-4,4)
pl.ylim(-4,4)
pl.subplot(122)
pl.hexbin(x, y, gridsize=40)
pl.xlim(-4,4)
pl.ylim(-4,4)
之间的点数分布大致相等,但事实并非如此。
(http://matplotlib.org/examples/pylab_examples/hexbin_demo.html)
答案 1 :(得分:1)
一种方法是使用plot
而不是scatter
(您仍然可以使用plot
参数使用'o'
生成散点图,并使用{{1关键字参数,如下所示:
rasterized
这应该会显着减小输出文件的大小。文本和艺术线条将保持向量,只有点被光栅化,所以这是一个很好的妥协。
根据您希望实现的目标,最好对数据进行直方图编制并对其进行绘图(例如import numpy as np
import matplotlib.pyplot as plt
a1,b1 = np.random.randn(400000,2).T #mock data of similar size to yours
plt.plot(a1,b1,'o',rasterized=True)
plt.savefig("test.ps")
或pyplot.hist2d
)。
答案 2 :(得分:1)
我认为这是由PostScript格式引起的,没有什么可以改变的。我们来算一算:
7.8MB类似于7.8 * 1024 * 1024 = 8,178,892.8。假设散点图中有400,000个点,这意味着如果文件中没有其他内容(即没有图例,没有注释等),您的文件会为散点图中的每个点分配20个字节。
现在,我不是PostScript专家,但是查看输出test.ps
,用于在PostScript中绘制圆圈的命令如下所示:
[x] [y] o
其中x和y是每个点的坐标。由于这些是浮点值,因此信息确实总共增加了15个字节,这与我上面的猜测相差不远。
所以是的,文件大小是由PostScript文件的性质引起的,PostScript文件为散点图中的400,000个点中的每个点存储了相当多的信息。
您可以将散点图存储为@AngusWilliams'答案中建议的栅格化图像,这将导致较小的文件大小。但是,您将失去基于矢量的文件格式的优势:在任何分辨率下无损缩放。
如果您不需要基于矢量的文件格式的这种优势,那么使用像.png
这样的其他文件格式可能会更好,在压缩图像方面通常比包含光栅化信息的PostScript更好