如何利用matplotlib作出高精度的图片
近来越来越多的研究生放弃使用MATLAB转用基于python语言的matplotlib来画论文报告的图表,说明后者自有比前者高的优势。比如博主itsc在其博客中做了如下实验:
将、以及图像精度对比,在matlab中发现了许多锯齿,使得图像十分不美观,图片如下:
图一 MATLAB所作
图二 matplotlib作图
看上去后者作出来的图片好像很模糊,实际上,这个图片只是按默认尺寸大小值来绘制的,这里我把它放大了。
(原文链接https://blog.csdn.net/shanchuan2012/article/details/51113874)
Matplotlib作图还有一个好处是保存可以直接保存为一般图像软件可以打开的png格式,但是MATLAB保存为仅其才能打开的fig格式(保存为png格式会出错,不知道是不是2016a的bug)。
接下来进入重点,怎么才能用matplotlib作出高精度的图片呢?改小自变量间隔区间是没用的,因为画图软件自然是近似画法。那么能不能把图片保真放大?答案是可以的,利用:
新建画布,设置大的画布尺寸再在画布上画图的方法:
mport numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-4, 4, 200)
f1 = np.power(10, x)
f2 = np.power(np.e, x)
f3 = np.power(2, x)
plt.plot(x, f1, 'r', x, f2, 'b', x, f3, 'g', linewidth = 2)
plt.axis([-4, 4, -0.5, 8])
plt.text(1, 7.5, r'$10^x$', fontsize = 16)
plt.text(2.2, 7.5, r'$e^x$', fontsize = 16)
plt.text(3.2, 7.5, r'$2^x$', fontsize = 16)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-4, 4, 4000000)
f1 = np.power(10, x)
f2 = np.power(np.e, x)
f3 = np.power(2, x)
fig=plt.figure(figsize=(30,30))
ax=fig.add_subplot(111)
#fig,ax=plt.subplots(figsize=(30,30))
ax.plot(x, f1, 'r', x, f2, 'b', x, f3, 'g', linewidth = 2)
ax.axis([-4, 4, -0.5, 8])
ax.text(1, 7.5, r'$10^x$', fontsize = 16)
ax.text(2.2, 7.5, r'$e^x$', fontsize = 16)
ax.text(3.2, 7.5, r'$2^x$', fontsize = 16)
后面这一段是本人对itsc博主的代码修改,前两句和第三句等价,这里图片尺寸30x30可能有点大,可以适当改小一些,所得图片如下:
这应该超过写论文的图片精度了,甚至可以彩印出来。这种方法可以进一步拓展,应用的3d图、热力图(heatmap)和其他一些给人强烈视觉冲击的图表。