Python数据可视化

Matplotlib

  • Matplotlib来自于由John Hunter在2002年启动的一个用于创建图表的绘图项目,其目的是为Python构建一个与Matlab之间进行交互的绘图接口。是最著名Python绘图库, 主要用于二维绘图。具有画图质量高、方便快捷的绘图模块等特点。

Matplotlib入门

  • 绘图API:pyplot模块

  • 集成库:pylab模块(包含NumPy和pyplot中的常用函数)

  • 导入Matplotlib绘图包

  • pyplot对象相当于画笔,plot()函数在设置画笔绘制的对象,其它的类似函数在设置画笔的其它性质,最后通过show()函数使用画笔绘制出图像

import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 4.0, 0.1) # 从0到4,步频为0.1生成t数字序列
plt.plot(t, t) # 前面一位是横坐标,后面对应的是纵坐标
plt.show()
t

array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. , 1.1, 1.2,
       1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1, 2.2, 2.3, 2.4, 2.5,
       2.6, 2.7, 2.8, 2.9, 3. , 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8,
       3.9])
plt.plot(t, t**2)
plt.show()

  • 可以将两个曲线绘制在一个图里
plt.plot(t, t, t, t**2)
plt.show()

  • 通过plot()函数的o参数,将图像变为散点图
plt.plot(t, t**2, 'o')
plt.show()

  • 使用bar()函数,绘制柱状图
t = np.arange(0, 10, 1)
plt.bar(t, t**2)
plt.show()

Matplotlib图像属性控制

线条属性

  • 色彩和样式通过在绘图函数如plot()中添加参数来控制,常用参数:MF7g00

  • 颜色修改示例:

t = np.arange(0, 4, 0.1)
plt.plot(t, t**2, 'g') # 设为绿色
plt.show()

  • 修改线型示例:
plt.plot(t, t**2,'--') # 设为虚线
plt.show()

  • 设置点的形状示例:
t = np.arange(0, 10, 1)
plt.plot(t, t**2, 'v') #设置点的形状为三角形
plt.show()

  • 多个参数同时使用,需要指明参数的名称才能同时生效:
    • 颜色:color
    • 样式:linestyle
    • 点形状:marker
    • 线条宽度:linewidth
    • 线条含义标识:label
t1 = np.arange(0, 4, 0.1)
t2 = np.arange(0, 4, 0.5)
# 先设置参数,再显示图像,才能生效(plt可以理解为画笔)
plt.plot(t1, t1**2, linestyle='--', color='r',linewidth='5', label='Line1') 
plt.plot(t2, t2+2, color='g', linewidth='3', marker='o', label='Line2')
plt.legend(loc='upper left') # 设置线条含义标识显示位置(不设置显示不出来)
plt.show()

添加说明文字

  • 可以设置整个图的名称、坐标轴的名称

  • 设置图的名称

t = np.arange(0, 4, 0.1)
plt.plot(t, t**2) # 设为绿色

plt.title("Hello!")
plt.show()

  • 设置横纵坐标
plt.plot(t, t**2) # 设为绿色
# 先设置参数,再显示图像,才能生效(plt可以理解为画笔)
plt.title("Hello!")
plt.xlabel("NumberX")
plt.ylabel("NumberY")
plt.show()

子图

  • 子图是指在一次绘制过程中绘制的多个坐标图,每一个被包含的的坐标图都是子图。

  • 子图可以通过pyplot对象的subplot()函数来绘制

  • 子图也可以通过设置坐标轴的长短和坐标原点的axes()方法来创建。

  • 通过subplot()函数在一个图中绘制四个子图示例:

  • 参数的意义:如221(也可写成2,2,1)的意思就是创建2行2列4个子图,当前子图在第一个位置

# t1 = np.arange(0, 4, 0.1)
# t2 = np.arange(0, 4, 0.5)
plt.subplot(221)
plt.subplot(222)
plt.subplot(223)
plt.subplot(224)
<AxesSubplot:>

  • 在子图中绘制图像
t1 = np.arange(0, 4, 0.1)
t2 = np.arange(0, 4, 0.5)
#先创建子图
plt.subplot(1,2,1)
#再绘制图像
plt.plot(t1, t1**2)
plt.subplot(1,2,2)
plt.plot(t2, 2*t2+3)
plt.show()

  • 使用axes()函数设置坐标轴来创建2个子图
plt.axes([.1,.1,0.8,0.8]) #创建原点在(0.1,0.1),两个坐标轴的长度都为0.8的子图
plt.plot(t1, t1**2) # 在上面创建的子图上绘制曲线
plt.axes([.3,.5,0.3,0.3])
plt.plot(t2, 2*t2+3)
plt.show()

Pandas绘图

  • Pandas 对 Matplotlib 绘图软件包的基础上单独封装了一个plot()接口,通过调用该接口可以实现常用的绘图操作。

  • Pandas 之所以能够实现了数据可视化,主要利用了 Matplotlib 库的 plot() 方法,它对 plot() 方法做了简单的封装,因此您可以直接调用该接口。

  • 示例:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), index = pd.date_range('11/2/2021', periods=8), columns=list('ABCD')) #randn使数据具有正态分布
df.plot(linestyle='--') #调用plot()方法绘图
<AxesSubplot:>

  • 除了默认的线形图,Pandas也可以绘制其它图形:

    • 柱状图:bar() 或 barh()
    • 直方图:hist()
    • 箱状箱:box()
    • 区域图:area()
    • 散点图:scatter()
  • 通过关键字参数kind可以把上述方法传递给 plot()。

  • 绘制柱状图:

df.plot.bar()
<AxesSubplot:>

  • 绘制水平柱状图
df.plot(kind='barh')
<AxesSubplot:>

  • 绘制柱状堆叠图(参数stacked设为True)
df.plot(kind='bar', stacked='True')
<AxesSubplot:>