用python的matplotlib画出的图,一般是需要保存到本地使用的。
如果是用show()展出的图,再右键保存,这样的图是失帧而非矢量的。
保存矢量图的方法是使用函数savefig(),官方资料:savefig()
可以看到它的参数还是很多的,但保存矢量图只需要三个参数,即fname, 文件名称,和dpi, the resolution in dots per inch (每英寸点的分辨率), 以及format, 文件格式。
一个完整的保存矢量图的代码为:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x1 = np.random.uniform(-10, 10, size=20)
x2 = np.random.uniform(-10, 10, size=20)
#print(x1)
#print(x2)
number = []
x11 = []
x12 = []
for i in range(20):
number.append(i+1)
x11.append(i+1)
x12.append(i+1)
plt.figure(1)
# you can specify the marker size two ways directly:
plt.plot(number, x1, 'bo', markersize=20,label='a') # blue circle with size 20
plt.plot(number, x2, 'ro', ms=10,label='b') # ms is just an alias for markersize
lgnd=plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0,numpoints=1,fontsize=10)
lgnd.legendHandles[0]._legmarker.set_markersize(16)
lgnd.legendHandles[1]._legmarker.set_markersize(10)
plt.show()
fig.savefig('scatter.eps',dpi=600,format='eps')
保存矢量图的具体代码为最后一行 ,此处保存的名称为scatter,格式为eps,分辨率为600。
说明:
1. savefig()的format参数指出后台支持的文件格式包含:.png, .pdf, .ps, .eps, .svg。
但不限于这些,当输入一个错误的格式如.bmp,系统会显示错误,并提示其支持的格式:
支持的格式包括:.eps, .jpeg, .jpg, .pdf, .pgf, .png, .ps, .raw, .rgba, .svg, .svgz, .tif, .tiff。
2. savefig()中的fname参数说明指出,format参数是可以省略的
即当format未设置,而输入的fname包含文件格式的扩展时,保存的文件格式即为该扩展。
故上述的保存矢量图的代码可直接改为:
fig.savefig('scatter.eps',dpi=600)
效果不变。
3. dpi的数值设置
根据Wiley的关于图像的指导准则,一般折线图的dpi设置为600,而图像的dpi设置为300。
具体的dpi可根据个人要求,一般为1200/ 600/ 300。
最后需要说明的是,类似这样图例legend放在图像外侧时,如果不设置图像大小等参数,保存的图往往是不完整的,如上述代码保存的图像效果为:
右侧图例未显示完整,如何解决这个 问题,会在下面博客中举例说明。