Matplotlib库---Python数据分析和展示2(北理工mooc)

文章目录

    • Matplotlib库
        • pyplot的绘图区域
      • plot函数
        • pyplot中文显示
        • pyplot的文本显示
        • 子绘图区域
      • pyplot基本图标函数
        • 饼图
        • 直方图
        • 极坐标图
        • 散点图

Matplotlib库

Matplotlib库的方法众多,本文只展示基本主要的方法。



matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。 即利用pyplot即可使用matplotlib的所有可视化类。
import matplotlib.pyplot as plt

import matplotlib.pyplot as plt
plt.plot([3, 4, 5, 3, 2])
plt.ylabel('grade')
plt.savefig('test', dpi=600) # 保存为PNG文件,dpi为每一英寸区域中所包含的像素点
plt.show

Matplotlib库---Python数据分析和展示2(北理工mooc)_第1张图片
当绘制对象为一维列表时,默认其列表元素为y,索引值为x。

import matplotlib.pyplot as plt
plt.plot([0, 2, 4, 6, 8], [3, 4, 5, 3, 2])
plt.ylabel('grade')
plt.axis([-1, 10, 0, 6]) # x轴起始于-1,结束于10,y轴起始于0.结束于6
plt.show

Matplotlib库---Python数据分析和展示2(北理工mooc)_第2张图片

输入两个列表时,第一个列表为x,第二个列表为y。

pyplot的绘图区域

ply.subplot(nrows, ncols, plot_number)
将绘图区域分割为以第一个参数为横轴数量,第二个参数为纵轴数量的子区域;第三个参数为指定当前绘图的区域。
如plt.subplot(3,2,4)即将绘图区域在纵向上分为3块,横向上分为2块的合计6块子区域,绘制在4号区域(从1开始计数,先横向再纵向)。该语句也可以写为plt.subplot(324)。

plot函数

plot(x, y, format_string, **kwargs)

  • x:X轴数据
  • y:Y轴数据
  • format_string:控制曲线的格式字符串,可选
  • **kwargs:第二组或更多(x, y, format_string)
    绘制多条曲线时,x轴数据不能省略。
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(10)
plt.plot(a, 1.5 * a, a, 3 * a, a, 5 * a)
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第3张图片
format_string格式控制字符串
format_string由颜色字符、风格字符、标记字符(在每一个数据点处做标记)组成:
Matplotlib库---Python数据分析和展示2(北理工mooc)_第4张图片
Matplotlib库---Python数据分析和展示2(北理工mooc)_第5张图片
Matplotlib库---Python数据分析和展示2(北理工mooc)_第6张图片

import matplotlib.pyplot as plt
import numpy as np
a = np.arange(10)
plt.plot(a, 1.5 * a, 'go', a, 3 * a, 'r--v', a, 5 * a, 'y:3')
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第7张图片
也可以使用color,linestyle,marker等参数进行代替,如color=‘green’linestyle=‘dashed’marker=‘o’markerfacecolor=‘blue’(控制标记的颜色),markersize=20(控制标记大小)。

pyplot中文显示

pyplot默认不支持中文显示,需要rcParams修改字体实现。

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei' # 黑体
a = [3, 1, 4, 5, 2]
plt.plot(a)
plt.ylabel('纵坐标')
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第8张图片
rcParams属性:
Matplotlib库---Python数据分析和展示2(北理工mooc)_第9张图片
对于font.family
Matplotlib库---Python数据分析和展示2(北理工mooc)_第10张图片
上述方法为绘图全局有效,以下是局部生效方法(建议使用):
在有中文输出处,增加一属性:fontproperties

import matplotlib.pyplot as plt
a = [3, 1, 4, 5, 2]
plt.plot(a)
plt.ylabel('纵坐标', fontproperties='SimHei', fontsize=20) # fontsize为字体大小
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第11张图片

pyplot的文本显示

基本文本显示函数:
Matplotlib库---Python数据分析和展示2(北理工mooc)_第12张图片

import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.rcParams['axes.unicode_minus']=False # 显示出符号
a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.xlabel('横坐标:时间', fontproperties='SimHei', fontsize=20, color='green')
plt.ylabel('纵坐标:振幅', fontproperties='SimHei', fontsize=20)
plt.title(r'正弦波$ y= cos(2 \pi x) $', fontproperties='SimHei', fontsize=15) # 用\$括起来的是latex格式文本
plt.text(2, 1, r'$\mu=100$', fontsize=15)
plt.axis([-1, 6, -1.5, 1.5])
plt.grid(True)
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第13张图片
注释函数:
plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)
第一个参数为字符串,表示注释内容;第二个参数为箭头所指位置,为元组类型;第三个参数为注释文本所在位置,元组类型;第四个参数对属性进行定义,如:
arrowprops=dict(facecolor=‘black’, shrink=0.1, width=2),表示箭头为黑色,宽度为2,箭头和所指位置及文本的的距离。

子绘图区域

plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
理念:设计网格,选中网格,确定选中行列区域数量,编号从0开始。

  • GridSpec:元组,将一个区域分成的形状,如(3, 3)为将区域分割为3行3列的网格区域
  • CurSpec:元组,选中网格的位置,如(1, 0)则为第一行第零列(从0开始计数)
  • colspan:在列的方向上的占用空间,如果为2,则将宽度由1扩展至2
    Matplotlib库---Python数据分析和展示2(北理工mooc)_第14张图片
    绘图格式:
    Matplotlib库---Python数据分析和展示2(北理工mooc)_第15张图片
    省略号处为编写绘图代码的位置。
    等价替换:
    Matplotlib库---Python数据分析和展示2(北理工mooc)_第16张图片

pyplot基本图标函数

Matplotlib库---Python数据分析和展示2(北理工mooc)_第17张图片
Matplotlib库---Python数据分析和展示2(北理工mooc)_第18张图片
Matplotlib库---Python数据分析和展示2(北理工mooc)_第19张图片

饼图

import matplotlib.pyplot as plt
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' # 标签
sizes = (15, 30, 45, 10) # 每个标签所对应尺寸
explode = (0, 0.1, 0, 0) # 每一块突出的比例
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=90) # shadow为饼图阴影的展示与否,autopct为图中百分数显示的方式,startangle为起始的角度
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第20张图片

plt.axis(‘equal’) 可以将饼图变为正圆形。

直方图

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
nu, sigma = 100, 20 # 均值和标准差
a = np.random.normal(nu, sigma, size=100)
plt.hist(a, 20, normed=1, histtype='stepfilled', facecolor='b', alpha=0.75) # 第二个参数为bin,控制生成直方图中直方的个数,normed为1时,将直方图中直方的高度归一化为所占的比例,为0时,则纵轴表示的是出现的个数。
plt.title('Histgram')
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第21张图片
直方图将横轴均分为bin个区域,每个直方的高度为位于这个区域中元素个数。

极坐标图

面向对象绘制极坐标图

import numpy as np
import matplotlib.pyplot as plt
N = 20
theta = np.linspace(0.0, 2*np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)
ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)
for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 10.))
    bar.set_alpha(0.5)
plt.show()    

Matplotlib库---Python数据分析和展示2(北理工mooc)_第22张图片

N为绘制数据的个数。

  • left=theta:绘制颜色区域的开始处
  • height=radii:从中心点向边缘绘制的长度
  • width=width:每个绘图区域在角度上辐射的范围

同样的,可以使用plt.polar来进行绘制。

import numpy as np
import matplotlib.pyplot as plt
N = 20
theta = np.linspace(0.0, 2*np.pi, N, endpoint=False)
radii = 10 + np.arange(N)
width = 2 * np.pi / N 
ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)
for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 30.)) # 保证radii/30处于0到1的范围内才可调节颜色
    bar.set_alpha(0.9) # 设置色彩的透明度,0到1之间
plt.show()    

Matplotlib库---Python数据分析和展示2(北理工mooc)_第23张图片

散点图

面向对象绘制散点图

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots() # fig,ax对应subplot生成的图表和图表对应区域,区域划分不设置默认为111
ax.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o')
ax.set_title('Simple Scatter')
plt.show()

Matplotlib库---Python数据分析和展示2(北理工mooc)_第24张图片

你可能感兴趣的:(Python数据分析,python)