Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。
本文就日常生活中常见的业务场景进行展开讨论,更详尽的说明可以参考文档。
折线图(line chart)是我们日常工作、学习中经常使用的一种图表,它可以直观的反映数据的变化趋势。
代码如下:
def draw_line():
N = 8
t = np.linspace(0, 1, N)
fig, (axA, axB) = plt.subplots(1, 2)
# Line
axA.plot(t, t, marker = 'o')
axA.set_title('line')
# Curve
axB.plot(t, t, linestyle='--', marker='*',c='r', label='linear')
axB.plot(t, t**2, linestyle='-.', marker='D',c='c', label='quadratic')
axB.plot(t, t**3, linestyle=':', marker='^',c='y', label='cubic')
axB.set_title('Curve')
plt.legend()
plt.show()
函数说明:
plot([x], y, [fmt], data=None, **kwargs)
散点图用于在水平轴和垂直轴上绘制数据点,它表示了因变量随自变量变化的趋势。通俗地讲,它反映的是一个变量受另一个变量的影响程度。
可视化结果:
代码如下:
def draw_scatter():
N = 128
x = np.random.rand(N)
y = np.random.rand(N)
c = np.random.rand(N)
s = np.random.rand(N)
s = np.pi*(32*s)**2
cmapDisp = cm.get_cmap('rainbow')
fig, (axA, axB) = plt.subplots(1, 2)
# scatter
axA.scatter(x, y, s=8,c=cmapDisp(c),alpha=0.75)
axA.set_title('scatter')
# bubble
axB.scatter(x, y, c=cmapDisp(c), s=s, alpha=0.25, edgecolors='none')
axB.set_title('bubble')
plt.show()
函数说明:
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs)
柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其所表示的数值成正比关系。柱状图显示了不同类别之间的比较关系,图表的水平轴 X 指定被比较的类别,垂直轴 Y 则表示具体的类别值。
代码如下:
def draw_bar():
N = 8
Hx = np.random.randint(18, 65, size=N)
Mx = np.random.randint(18, 65, size=N)
Hs = np.random.randint(1, 5, size=N)
Ms = np.random.randint(1, 5, size=N)
indice = np.arange(N) + 1
igrupos = ['G{}'.format(g) for g in indice]
iidades = np.arange(0, 80, 5)
larg = 0.25
fig, (axA, axB) = plt.subplots(1, 2)
# Bar
axA.bar(indice - larg, Hx, width=larg, yerr=Hs,color='c', align='edge', label='man')
axA.bar(indice, Mx, width=larg, yerr=Ms, color='r', align='edge', label='women')
axA.set_title('Bar')
axA.set_xticks(indice)
axA.set_yticks(iidades)
axA.set_xticklabels(igrupos)
axA.legend()
# Barras
axB.bar(indice, Hx, color='c', label='man', yerr=Hs)
axB.bar(indice, Mx, color='r', bottom=Hx, label='women', yerr=Ms)
axB.set_title('Barras ')
axB.set_xticks(indice)
axB.set_xticklabels(igrupos)
axB.set_yticks(iidades*2)
axB.legend()
plt.show()
函数说明:
bar(x, height, width, bottom, align)
饼状图用来显示一个数据系列,具体来说,饼状图显示一个数据系列中各项目的占项目总和的百分比。
代码如下:
def test_pie():
etiqueta = list('ABCDEFGHIJKL')
M, N = 128, len(etiqueta)
valor = np.random.random(N)*0.9 + 0.1
var = np.random.random(M)
# param
cmapRadial = cm.get_cmap('magma')
theta = 2*np.pi*np.arange(N)/N
omega = 2*np.pi*np.arange(M)/M
valor_ = np.append(valor, [valor[0]])
var_ = np.append(var, [var[0]])
theta_ = np.append(theta, [theta[0]])
omega_ = np.append(omega, [omega[0]])
raio = 1.25
mult = 0.15
# draw
fig = plt.figure()
axA = fig.add_subplot(121, aspect='equal')
axB = fig.add_subplot(122, projection='polar')
# Pizza
axA.pie(valor, labels=etiqueta, pctdistance=0.9,autopct='%1.1f%%', radius=1.1)
axA.pie(var, radius=0.9, colors=cmapRadial(var))
axA.set_title('Pizza')
centro = plt.Circle((0,0), 0.75, fc='white')
axA.add_patch(centro)
# Radar
axB.plot(theta_, valor_, marker='o', color='black', label='variable')
axB.fill_between(theta_, 0, valor_, facecolor='black', alpha=0.25)
axB.plot(omega_, raio + var_*mult, color='y', label='change')
axB.plot(omega_, raio - var_*mult, color='y')
axB.fill_between(omega_, raio - var_*mult, raio + var_*mult,facecolor='y', alpha=0.25)
axB.set_title('Radar')
axB.set_xticks(theta)
axB.set_xticklabels(etiqueta)
axB.set_rticks(np.linspace(0, 1.5, 7))
axB.legend()
plt.show()
函数说明:
pie(x, labels=None, colors=None, autopct=None, pctdistance=0.6, labeldistance=1.1, radius=None)
本文详细地介绍了使用matplotlib画折线图、散点图、饼状图以及柱状图的样例,并给出了相关可视化效果。
您学废了吗?
关注公众号《AI算法之道》,获取更多AI算法资讯。
注: 关注公众号,后台回复 画图 , 可获取完整代码