Matplotlib绘图简要

        Matplotlib是 Python 中较为常用和知名的可视化绘图工具,其面向对象的可视化绘制特点衍生出了多个优秀的第三方绘图工具,用户可以根据需求定制可视化视觉样式和排版布局。

基本元素

Figure

        绘图之前,我们需要构造一个Figure对象。

import matplotlib.pyplot as plt
fig = plt.figure()

Axes

        一个Figure对象还需要有轴,以此来作为基准。此处通过fig.add_subplot(111)来添加axes。

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(xlim=[1, 4], ylim=[-2, 2], title='Axes',
       ylabel='Y-Axis', xlabel='X-Axis')
plt.show()

坐标系

直角坐标系

        直角坐标系又称笛卡儿坐标系(Cartesian coordinate system),是一种用代数公式表达几何 形状的正交坐标系统,也是可视化绘图中常见的一种坐标系。在二维的直角坐标系中,坐标系 通常由两个互相垂直的坐标轴(X 轴、Y 轴)构成,两个坐标轴相交的点称为原点。

极坐标系

        极坐标系(polar coordinate system)是一种在平面内由极点(pole)、极轴(polar axis)和 极径(数据点到极点的距离)组成的坐标系统。

import pandas as pd
import numpy as np
import proplot as pplt
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

from proplot import rc
rc["font.family"] = "Times New Roman"
rc['tick.labelsize'] = 12
rc["suptitle.size"] = 15

pi = np.pi
theta=np.arange(0,2*pi,0.02)#极角,弧度制
r1 = 1*(1 -np.sin(theta))
r2 = 3+ np.cos(7* theta)

#(a) Matplotlib中的极坐标系绘图示例1

fig, ax = plt.subplots(figsize=(4,3.5),dpi=100,facecolor="w",subplot_kw={'projection': 'polar'})
ax.plot(theta, r1, "k",lw=1)     
plt.show()


#(b)Matplotlib中的极坐标系绘图示例2

fig, ax = plt.subplots(figsize=(4,3.5),dpi=100,facecolor="w",subplot_kw={'projection': 'polar'})
ax.plot(theta, r2, "k",lw=1)     
plt.show()

基本绘图

线图

        绘制线图的逻辑十分简单,首先定义x,y,然后在之前定义的ax1,ax2,ax3分别绘制子图,并设置对应的各个参数即可。

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(224)


x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)

ax1.plot(x, y_sin)
ax2.plot(x, y_sin, 'go--', linewidth=2, markersize=12)
ax3.plot(x, y_cos, color='red', marker='+', linestyle='dashed')

散点图

        利用scatter就OK,很简单。

柱形图

        柱形图的绘制可以方便我们进行直观对比。

np.random.seed(10)
x = np.arange(10)
y = np.random.randn(10)

fig, ax = plt.subplots()
vert_bars = ax.bar(x, y, color='lightblue', align='center')

for bar, height in zip(vert_bars, y):
    if height < 0:
        bar.set(edgecolor='darkred', color='salmon', linewidth=3)

plt.show()

等高线图

        近几年机器学习迅速发展,等高线图往往被用来描述算法决策边界或者体现神经网络训练过程,因此需要重点掌握。

 

fig, ax = plt.subplots(1)


x = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)


xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)


ax.contour(x, y, z)

作图细节

区间范围

        使用ax设置区间范围时,如果不人为限定区间,x与y将会被自动限制,反之如果人为干预,得到的最终图像所体现的效果不一定会很好。

ax.set_xlim([xmin, xmax])   #设置X轴的区间
ax.set_ylim([ymin, ymax])   #Y轴区间
ax.axis([xmin, xmax, ymin, ymax])   #X、Y轴区间
ax.set_ylim(bottom=-10)     #Y轴下限
ax.set_xlim(right=25)       #X轴上限

图例

        当一张图需要描述多个对象时,我们很难区分彼此,因此就需要引入图例。

fig, ax = plt.subplots()

ax.plot([1, 2, 3, 4], [10, 20, 25, 30], label='vector')
ax.plot([1, 2, 3, 4], [30, 23, 13, 4], label='jason')
ax.scatter([1, 2, 3, 4], [20, 10, 30, 15], label='albert')

ax.legend()
plt.show()

 

布局

        在之前绘制子图的过程中,我们发现会出现冗余表示的问题,例如:

         即如果每个子图x,y的定义域都一致的话,直观上很容易造成冗余,繁琐的印象,此时可以通过添加sharex, sharey进一步调整。

fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)
ax1.plot([1, 2, 3, 4], [1, 2, 3, 4])
ax2.plot([3, 4, 5, 6], [6, 5, 4, 3])
plt.show()

总结

        本次以python的第三方库Matplotlib出发,主要进行了基本元素、坐标系、基本绘图与作图细节四个部分的简要介绍,初步完成了使用Matplotlib对数据进行可视化,接下来将进一步学习Seaborn库,以加深对热力图绘制的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值