使用对数刻度
当可视化的数据变化范围非常广时,如果仍然使用常规的坐标轴刻度,将导致数据密集显示,甚至无法看到数据的变化趋势,这时,使用对数刻度就可以对图形进行更好的展示。
importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(1, 10, 1024) plt.yscale('log') plt.plot(x, x, c='c', lw=2., label=r'$f(x)=x$') plt.plot(x, 10**x, c='y', ls='--', lw=2., label=r'$f(x)=e^x$') plt.plot(x, np.log(x), c='m', lw=2., label=r'$f(x)=\log(x)$') plt.legend() plt.show()
若使用常规坐标轴刻度,则图形将变得混乱:
Tips:通过向 plt.yscale() 函数传递 'log' 参数值来得到对数刻度;其他可用缩放类型参数值还包括 'linear'、'symlog' 等。同样,我们也可以使用 plt.xscale() 在x轴上获得相同的结果默认情况下,对数基数为 10,但可以使用可选参数 basex 和 basey 进行更改。设置对数刻度适用于任何图形,而不仅仅是曲线图。
同样,使用对数标度也可以用于放大范围非常大的数据上的一个小范围:
importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(-100, 100, 4096) plt.xscale('symlog', linthreshx=6.) plt.plot(x, np.sinc(x), c='c') plt.show()
Tips:将 "symlog" 作为 plt.xscale() 的参数值,可以设置以 0 为中心的对称对数刻度,如通过设置 "linthreshx=6",指定了对数刻度的范围为 [-6, 6],此时,在 [-6, 6] 范围内使用对数刻度,而超出该范围则使用线性刻度。这样,我们既可以详细地查看某个范围内的数据,同时仍然可以查看大量范围外数据的大致特征。
使用极坐标
有些图形的绘制和角度有着密不可分的关系。例如,扬声器的功率取决于测量的角度。此时,极坐标就是表示此类数据关系的最佳选择。
importnumpyasnpimportmatplotlib.pyplotaspltt=np.linspace(0 , 2*np.pi, 1024) plt.axes(polar=True) plt.plot(t, 1.+.25*np.sin(16*t), c='m') plt.show()
Tips:plt.axes() 可以显式的创建一个 Axes 实例,从而进行一些自定义的设置。只需使用可选的polar参数即可设置使用极坐标。
虽然绘制曲线可能是极坐标最常见的用法。但是,我们也可以使用极坐标绘制其他任何类型的图形,如条形图和形状。例如,使用极坐标和多边形,可以绘制雷达图:
importnumpyasnpimportmatplotlib.patchesaspatchesimportmatplotlib.pyplotaspltax=plt.axes(polar=True) theta=np.linspace(0, 2*np.pi, 8, endpoint=False) radius=.25+.75*np.random.random(size=len(theta)) points=np.vstack((theta, radius)).transpose() plt.gca().add_patch(patches.Polygon(points, color='c')) plt.show()
Tips:这里所用的多边形坐标是多边形顶点与原点间的角度和距离,不需要执行从极坐标到笛卡尔坐标的显式转换。