Matplotlib使用对数刻度和极坐标

4,097 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

使用对数刻度

当可视化的数据变化范围非常广时,如果仍然使用常规的坐标轴刻度,将导致数据密集显示,甚至无法看到数据的变化趋势,这时,使用对数刻度就可以对图形进行更好的展示。

import numpy as np
import matplotlib.pyplot as plt
x = 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进行更改。设置对数刻度适用于任何图形,而不仅仅是曲线图。 同样,使用对数标度也可以用于放大范围非常大的数据上的一个小范围:

import numpy as np
import matplotlib.pyplot as plt
x = 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]范围内使用对数刻度,而超出该范围则使用线性刻度。这样,我们既可以详细地查看某个范围内的数据,同时仍然可以查看大量范围外数据的大致特征。

使用极坐标

有些图形的绘制和角度有着密不可分的关系。例如,扬声器的功率取决于测量的角度。此时,极坐标就是表示此类数据关系的最佳选择。

import numpy as np
import matplotlib.pyplot as plt
t = 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参数即可设置使用极坐标。

虽然绘制曲线可能是极坐标最常见的用法。但是,我们也可以使用极坐标绘制其他任何类型的图形,如条形图和形状。例如,使用极坐标和多边形,可以绘制雷达图:

import numpy as np
import matplotlib.patches as patches
import matplotlib.pyplot as plt
ax = 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:这里所用的多边形坐标是多边形顶点与原点间的角度和距离,不需要执行从极坐标到笛卡尔坐标的显式转换。

系列链接

Matplotlib常见统计图的绘制

Matplotlib使用自定义颜色绘制统计图

Matplotlib控制线条样式和线宽

Matplotlib自定义样式绘制精美统计图

Matplotlib在图形中添加文本说明

Matplotlib在图形中添加注释

Matplotlib在图形中添加辅助网格和辅助线

Matplotlib添加自定义形状

Matplotlib控制坐标轴刻度间距和标签