《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02

每天妹子看一遍,激励自己努力学不厌

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第1张图片

matplotlib概述

matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。

matplotlib基本功能

  1. 基本绘图 (在二维平面坐标系中绘制连续的线)
    1. 设置线型、线宽和颜色
    2. 设置坐标轴范围
    3. 设置坐标刻度
    4. 设置坐标轴
    5. 图例
    6. 特殊点
    7. 备注
  2. 图形对象(图形窗口)
    1. 子图
    2. 刻度定位器
    3. 刻度网格线
    4. 半对数坐标
    5. 散点图
    6. 填充
    7. 条形图
    8. 饼图
    9. 等高线图
    10. 热成像图
    11. 三维曲面
    12. 简单动画

matplotlib基本功能详解

基本绘图

绘图核心API

案例:绘制一条曲线
用linspace生成等差数列,作为x轴,x和y合成一一对应成为一个坐标。调用show()会形成阻塞,关闭窗口后才会程序接着运行。

import numpy as np
import matplotlib.pyplot as mp
# xarray: <序列> 水平坐标序列
# yarray: <序列> 垂直坐标序列
mp.plot(xarray, yarray)
#显示图表
mp.show()

x和y需要一一对应

import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3,4,5])
y = np.array([12,53,23,34,11])
plt.plot(x,y)
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第2张图片

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi,np.pi,50)
y = np.sin(x)
plt.plot(x,y)
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第3张图片
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第4张图片

绘制水平线与垂直线:

import numpy as np
import matplotlib.pyplot as mp

# vertical 绘制垂直线
mp.vlines(vval, ymin, ymax, ...)
# horizotal 绘制水平线
mp.hlines(xval, xmin, xmax, ...)
#显示图表
mp.show()
x = np.array([1,2,3,4,5])
y = np.array([12,53,23,34,11])
plt.hlines(20,2,4)
plt.vlines([2,3,4,5],20,40)
plt.plot(x,y)
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第5张图片
也可以对应点的组合划线
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第6张图片
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第7张图片

线型、线宽和颜色

案例:绘制一条正弦曲线

#linestyle: 线型  '-'  '--'  '-.'  ':'
#linewidth: 线宽
	#	数字
#color: <关键字参数> 颜色
	#	英文颜色单词 或 常见颜色英文单词首字母 或 #495434 或 (1,1,1) 或 (1,1,1,1)
#alpha: <关键字参数> 透明度
	#	浮点数值
mp.plot(xarray, yarray, linestyle='', linewidth=1, color='', alpha=0.5)
设置坐标轴范围 ,设置xy轴的可视范围

案例:把坐标轴范围设置为 -π ~ π

#x_limt_min:	 x轴范围最小值
#x_limit_max:	 x轴范围最大值
mp.xlim(x_limt_min, x_limit_max)
#y_limt_min:	 y轴范围最小值
#y_limit_max:	 y轴范围最大值
mp.ylim(y_limt_min, y_limit_max)
x = np.linspace(-np.pi,np.pi,50)
plt.xlim(0,np.pi)
plt.ylim(0,1)
plt.plot(x,np.cos(x),linestyle='-.',color='r',alpha=0.8)

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第8张图片

设置坐标刻度

案例:把横坐标的刻度显示为:0, π/2, π, 3π/2, 2π

#x_val_list: 	x轴刻度值序列
#x_text_list:	x轴刻度标签文本序列 [可选]
mp.xticks(x_val_list , x_text_list )
#y_val_list: 	y轴刻度值序列
#y_text_list:	y轴刻度标签文本序列 [可选]
mp.yticks(y_val_list , y_text_list )

刻度的值序列和文本序列意义对应

x = np.linspace(-np.pi,np.pi,50)
vals = [-np.pi,-np.pi/2,0,np.pi/2,np.pi]
texts = [r'$-\pi$',r'$-\pi/2$','0',r'$\pi/2$',r'$\pi$']
plt.xticks(vals,texts)
plt.plot(x,np.sin(x),linestyle='-',color='r',alpha=0.8)
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第9张图片

刻度文本的特殊语法LaTex排版语法字符串

r'$x^n+y^n=z^n$',   r'$\int\frac{1}{x} dx = \ln |x| + C$',     r'$-\frac{\pi}{2}$'

x 2 + y 2 = z 2 , ∫ 1 x d x = ln ⁡ ∣ x ∣ + C , − π 2 x^2+y^2=z^2, \int\frac{1}{x} dx = \ln |x| + C, -\frac{\pi}{2} x2+y2=z2,x1dx=lnx+C,2π

附上Latex字符大全
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第10张图片
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第11张图片

设置坐标轴

坐标轴名:left / right / bottom / top

# 获取当前坐标轴字典,{'left':左轴,'right':右轴,'bottom':下轴,'top':上轴 }
ax = mp.gca()  # getCurrentaxis
# 获取其中某个坐标轴
axis = ax.spines['坐标轴名']
# 设置坐标轴的位置。 该方法需要传入2个元素的元组作为参数
# type:  移动坐标轴的参照类型  一般为'data' (以数据的值作为移动参照值)
# val:  参照值
axis.set_position(('data', val))
# 设置坐标轴的颜色
# color:  颜色值字符串
axis.set_color(color)

先获取坐标轴 ax = plt.gca()
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第12张图片

案例:设置坐标轴至中心。

#设置坐标轴
ax = mp.gca()
axis_b = ax.spines['bottom']
axis_b.set_position(('data', 0))
axis_l = ax.spines['left']
axis_l.set_position(('data', 0))
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax = plt.gca()
ax.spines['top'].set_color('none')  #取消上线
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))  #移到 0点位置
ax.spines['bottom'].set_position(('data',0))
plt.yticks([-1,-0.5,0,0.5,1])
vales = [-np.pi,-np.pi/2,0,np.pi/2,np.pi]
texts = texts = [r'$-\pi$',r'$-\pi/2$','0',r'$\pi/2$',r'$\pi$']
plt.xticks(vales,texts)
plt.plot(x,np.sin(x),linestyle='--',linewidth=2,alpha=0.7,color='r')
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第13张图片

图例

用图例legend需要现在线设置label标签,legend默认值就是放在最合适的位置
显示两条曲线的图例,并测试loc属性。

# 再绘制曲线时定义曲线的label
# label: <关键字参数 str> 支持LaTex排版语法字符串
mp.plot(xarray, yarray ... label='', ...)
# 设置图例的位置
# loc: <关键字参数> 制定图例的显示位置 (若不设置loc,则显示默认位置)
#	 ===============   =============
#    Location String   Location Code
#    ===============   =============
#    'best'            0
#    'upper right'     1
#    'upper left'      2
#    'lower left'      3
#    'lower right'     4
#    'right'           5
#    'center left'     6
#    'center right'    7
#    'lower center'    8
#    'upper center'    9
#    'center'          10
#    ===============   =============
mp.legend(loc='')

ax = plt.gca()
ax.spines['top'].set_color('none')  #取消上线
ax.spines['right'].set_color('none') #取消下线
ax.spines['left'].set_position(('data',0))  #移到 0点位置
ax.spines['bottom'].set_position(('data',0))
plt.yticks([-1,-0.5,0,0.5,1])
vales = [-np.pi,-np.pi/2,0,np.pi/2,np.pi]
texts = texts = [r'$-\pi$',r'$-\pi/2$','0',r'$\pi/2$',r'$\pi$']
plt.xticks(vales,texts)
plt.plot(x,np.sin(x),linestyle='--',linewidth=2,alpha=0.7,color='r',label=r'$y=sin(x)$')
plt.plot(x,np.cos(x),linestyle='-',linewidth=2,alpha=0.8,color= 'g',label=r'$y=cos(x)$')
plt.legend(loc = 'best')
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第14张图片

特殊点

案例:绘制当x=3π/4时两条曲线上的特殊点。

# xarray: <序列> 所有需要标注点的水平坐标组成的序列
# yarray: <序列> 所有需要标注点的垂直坐标组成的序列
mp.scatter(xarray, yarray, 
           marker='', 		#点型 ~ matplotlib.markers
           s=70, 			#大小
           edgecolor='', 	#边缘色
           facecolor='',	#填充色
           zorder=3			#绘制图层编号 (编号越大,图层越靠上)
)

特殊点就是在原图的基础上绘制散点,并且用点形表示出来。

#绘制特殊点
ax = plt.gca()
ax.spines['top'].set_color('none')  #取消上线
ax.spines['right'].set_color('none') #取消下线
ax.spines['left'].set_position(('data',0))  #移到 0点位置
ax.spines['bottom'].set_position(('data',0))
plt.yticks([-1,-0.5,0,0.5,1])
vales = [-np.pi,-np.pi/2,0,np.pi/2,np.pi]
texts = texts = [r'$-\pi$',r'$-\pi/2$','0',r'$\pi/2$',r'$\pi$']
plt.xticks(vales,texts)
plt.plot(x,np.sin(x),linestyle='--',linewidth=2,alpha=0.7,color='r',label=r'$y=sin(x)$')
plt.plot(x,np.cos(x),linestyle='-',linewidth=2,alpha=0.8,color= 'g',label=r'$y=cos(x)$')
pointx = [np.pi / 2, np.pi / 2]
pointy = [1,0]
plt.scatter(pointx, pointy ,marker= 'o', s=70, color= 'red' ,label= 'smaple points',zorder=3)
plt.legend(loc = 'best')
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第15张图片

marker点型可参照:help(matplotlib.markers)

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第16张图片

备注

案例:为在某条曲线上的点添加备注,指明函数方程与值。
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第17张图片
需要多个参数,文本备注参数,位置参数等

# 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。
mp.annotate(
    r'$\frac{\pi}{2}$',			#备注中显示的文本内容
    xycoords='data',			#备注目标点所使用的坐标系(data表示数据坐标系),以数据坐标系作为参考定位到xy
    xy=(x, y),	 				#备注目标点的坐标
    textcoords='offset points',	#备注文本所使用的坐标系(offset points表示参照点的偏移坐标系),以目标点作为远点,建立的便宜坐标系
    xytext=(x, y),				#备注文本的坐标
    fontsize=14,				#备注文本的字体大小
    arrowprops=dict()			#使用字典定义文本指向目标点的箭头样式
)

ax = plt.gca()
ax.spines['top'].set_color('none')  #取消上线
ax.spines['right'].set_color('none') #取消下线
ax.spines['left'].set_position(('data',0))  #移到 0点位置
ax.spines['bottom'].set_position(('data',0))
plt.yticks([-1,-0.5,0,0.5,1])
vales = [-np.pi,-np.pi/2,0,np.pi/2,np.pi]
texts = texts = [r'$-\pi$',r'$-\pi/2$','0',r'$\pi/2$',r'$\pi$']
plt.xticks(vales,texts)
plt.plot(x,np.sin(x),linestyle='--',linewidth=2,alpha=0.7,color='r',label=r'$y=sin(x)$')
plt.plot(x,np.cos(x),linestyle='-',linewidth=2,alpha=0.8,color= 'g',label=r'$y=cos(x)$')
pointx = [np.pi / 2, np.pi / 2]
pointy = [1,0]
plt.scatter(pointx, pointy ,marker= 'o', s=70, color= 'red' ,label= 'smaple points',zorder=3)

plt.annotate(
    r'$[\frac{\pi}{2},1]$',#备注中显示的文本内容
    xycoords='data',#备注目标点所使用的坐标系(data表示数据坐标系),以数据坐标系作为参考定位到xy
    xy=(np.pi / 2, 1),#备注目标点的坐标
    textcoords='offset points',#备注文本所使用的坐标系(offset points表示参照点的偏移坐标系),以目标点作为远点,建立的便宜坐标系
    xytext=(50, 40),#备注文本的坐标
    fontsize=14,#备注文本的字体大小
    arrowprops=dict(
    arrowstyle='->',
    connectionstyle='angle3')#使用字典定义文本指向目标点的箭头样式
)

plt.legend(loc = 'best')
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第18张图片

arrowprops参数使用字典定义指向目标点的箭头样式

#arrowprops字典参数的常用key
arrowprops=dict(
	arrowstyle='',		#定义箭头样式
    connectionstyle=''	#定义	连接线的样式
)

箭头样式(arrowstyle)字符串如下

=============================================
Name           Attrs
=============================================
  '-'          None
  '->'         head_length=0.4,head_width=0.2
  '-['         widthB=1.0,lengthB=0.2,angleB=None
  '|-|'        widthA=1.0,widthB=1.0
  '-|>'        head_length=0.4,head_width=0.2
  '<-'         head_length=0.4,head_width=0.2
  '<->'        head_length=0.4,head_width=0.2
  '<|-'        head_length=0.4,head_width=0.2
  '<|-|>'      head_length=0.4,head_width=0.2
  'fancy'      head_length=0.4,head_width=0.4,tail_width=0.4
  'simple'     head_length=0.5,head_width=0.5,tail_width=0.2
  'wedge'      tail_width=0.3,shrink_factor=0.5
=============================================

连接线样式(connectionstyle)字符串如下

=============================================
Name           Attrs
=============================================
  'angle' 		angleA=90,angleB=0,rad=0.0
  'angle3' 		angleA=90,angleB=0`   
  'arc'			angleA=0,angleB=0,armA=None,armB=None,rad=0.0
  'arc3' 		rad=0.0
  'bar' 		armA=0.0,armB=0.0,fraction=0.3,angle=None
=============================================

图形对象(图形窗口)

案例:绘制两个窗口,一起显示。

# 手动构建 matplotlib 窗口
mp.figure(
    '',					#窗口标题栏文本 
    figsize=(4, 3),		#窗口大小 <元组>
    dpi=120,			#像素密度
	facecolor=''		#图表背景色
)
mp.show() 

mp.figure方法不仅可以构建一个新窗口,如果已经构建过title='AAA’的窗口,又使用figure方法构建了title=‘AAA’ 的窗口的话,mp将不会创建新的窗口,而是把title='AAA’的窗口置为当前操作窗口。

设置当前窗口的参数

案例:测试窗口相关参数
设置标题,文本,刻度字体大小,还有网格布局。当字体布局太紧凑的时候会用tight_layout来紧凑布局

# 设置图表标题 显示在图表上方
mp.title(title, fontsize=12)
# 设置水平轴的文本
mp.xlabel(x_label_str, fontsize=12)
# 设置垂直轴的文本
mp.ylabel(y_label_str, fontsize=12)
# 设置刻度参数   labelsize设置刻度字体大小
mp.tick_params(..., labelsize=8, ...)
# 设置图表网格线  linestyle设置网格线的样式
	#	-  or solid 粗线
	#   -- or dashed 虚线
	#   -. or dashdot 点虚线
	#   :  or dotted 点线
mp.grid(linestyle='')
# 设置紧凑布局,把图表相关参数都显示在窗口中
mp.tight_layout() 


plt.yticks([-1,-0.5,0,0.5,1])
vales = [-np.pi,-np.pi/2,0,np.pi/2,np.pi]
texts = texts = [r'$-\pi$',r'$-\pi/2$','0',r'$\pi/2$',r'$\pi$']
plt.xticks(vales,texts)
plt.plot(x,np.sin(x),linestyle='--',linewidth=2,alpha=0.7,color='r',label=r'$y=sin(x)$')
plt.plot(x,np.cos(x),linestyle='-',linewidth=2,alpha=0.8,color= 'g',label=r'$y=cos(x)$')
pointx = [np.pi / 2, np.pi / 2]
pointy = [1,0]
plt.scatter(pointx, pointy ,marker= 'o', s=70, color= 'red' ,label= 'smaple points',zorder=3)

plt.annotate(
    r'$[\frac{\pi}{2},1]$',#备注中显示的文本内容
    xycoords='data',#备注目标点所使用的坐标系(data表示数据坐标系),以数据坐标系作为参考定位到xy
    xy=(np.pi / 2, 1),#备注目标点的坐标
    textcoords='offset points',#备注文本所使用的坐标系(offset points表示参照点的偏移坐标系),以目标点作为远点,建立的便宜坐标系
    xytext=(50, 40),#备注文本的坐标
    fontsize=14,#备注文本的字体大小
    arrowprops=dict(
    arrowstyle='->',
    connectionstyle='angle3')#使用字典定义文本指向目标点的箭头样式
)
plt.title('sin/cos',fontsize=12)
plt.xlabel('X',fontsize=14)
plt.ylabel('Y',fontsize=12)
plt.grid(linestyle=':')
plt.tick_params(labelsize=10)

plt.legend(loc = 'best')
plt.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第19张图片

子图

矩阵式布局

矩阵布局是对称的,不支持单元格的合并,每个图都是一样大
绘制矩阵式子图布局相关API:

mp.figure('Subplot Layout', facecolor='lightgray')
# 拆分矩阵
	# rows:	行数
    # cols:	列数
    # num:	编号
mp.subplot(rows, cols, num)
	#	1 2 3
	#	4 5 6
	#	7 8 9 
mp.subplot(3, 3, 5)		#操作3*3的矩阵中编号为5的子图
mp.subplot(335)			#简写

想要操作哪一个就调用哪一个子图进行操作

案例:绘制9宫格矩阵式子图,每个子图中写一个数字。

mp.figure('Subplot Layout', facecolor='lightgray')

for i in range(9):
	mp.subplot(3, 3, i+1)
	mp.text(
		0.5, 0.5, i+1,   #0.5,0.5是文本的位置 ,后面的是文本内容
		ha='center',  #垂直居中
		va='center',   #水平居中
		size=36,
		alpha=0.5,
		withdash=False
	)
	mp.xticks([])  #取消x轴的刻度
	mp.yticks([])   #取消y轴的刻度

mp.tight_layout()  #紧凑布局
mp.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第20张图片

网格式布局

网格式布局支持单元格的合并。
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第21张图片

绘制网格式子图布局相关API:
需要先导入一个mg对象,再创建一个3*3的子图,mp.subplot(gs[0, :2])表示要0行的,前两列合并成一个

import matplotlib.gridspec as mg
mp.figure('Grid Layout', facecolor='lightgray')
# 调用GridSpec方法拆分网格式布局
# rows:	行数
# cols:	列数
# gs = mg.GridSpec(rows, cols)	拆分成3行3列
gs = mg.GridSpec(3, 3)	
# 合并0行与0、1列为一个子图表
mp.subplot(gs[0, :2])
mp.text(0.5, 0.5, '1', ha='center', va='center', size=36)
mp.show()

案例:绘制一个自定义网格布局。

import matplotlib.gridspec as mg
mp.figure('GridLayout', facecolor='lightgray')
gridsubs = mp.GridSpec(3, 3)
# 合并0行、0/1列为一个子图
mp.subplot(gridsubs[0, :2])
mp.text(0.5, 0.5, 'Hello world', ha='center', va='center', size=36)
mp.tight_layout()
mp.xticks([])
mp.yticks([])
mp.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第22张图片
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第23张图片

自由式布局

自由式布局相关API:

mp.figure('Flow Layout', facecolor='lightgray')
# 设置图标的位置,给出左下角点坐标与宽高即可
# left_bottom_x: 坐下角点x坐标
# left_bottom_x: 坐下角点y坐标
# width:		 宽度
# height:		 高度
# mp.axes([left_bottom_x, left_bottom_y, width, height])
mp.axes([0.03, 0.03, 0.94, 0.94])
mp.text(0.5, 0.5, '1', ha='center', va='center', size=36)
mp.show()

案例:测试自由式布局,定位子图。

mp.figure('FlowLayout', facecolor='lightgray')

mp.axes([0.1, 0.2, 0.5, 0.3])
mp.text(0.5, 0.5, 1, ha='center', va='center', size=36)
mp.show()

刻度定位器

刻度定位器相关API:

# 获取当前坐标轴
ax = mp.gca()
# 设置水平坐标轴的主刻度定位器
ax.xaxis.set_major_locator(mp.NullLocator())
# 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

案例:绘制一个数轴。

mp.figure('Locators', facecolor='lightgray')
# 获取当前坐标轴
ax = mp.gca()
# 隐藏除底轴以外的所有坐标轴
ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 将底坐标轴调整到子图中心位置
ax.spines['bottom'].set_position(('data', 0))
# 设置水平坐标轴的主刻度定位器
ax.xaxis.set_major_locator(mp.NullLocator())
# 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
# 标记所用刻度定位器类名 
mp.text(5, 0.3, 'NullLocator()', ha='center', size=12)

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第24张图片

案例:使用for循环测试刻度器样式:

locators = ['mp.NullLocator()', 'mp.MaxNLocator(nbins=4)']
	
for i, locator in enumerate(locators):
    mp.subplot(len(locators), 1, i+1)
	mp.xlim(0, 10)
	mp.ylim(-1, 1)
	mp.yticks([])
	# 获取当前坐标轴
	ax = mp.gca()
	# 隐藏除底轴以外的所有坐标轴
	ax.spines['left'].set_color('none')
	ax.spines['top'].set_color('none')
	ax.spines['right'].set_color('none')
	# 将底坐标轴调整到子图中心位置
	ax.spines['bottom'].set_position(('data', 0))
	# 设置水平坐标轴的主刻度定位器
	ax.xaxis.set_major_locator(eval( ))
	# 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
	ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
	mp.plot(np.arange(11), np.zeros(11), c='none')
	# 标记所用刻度定位器类名
	mp.text(5, 0.3, locator, ha='center', size=12)

常用刻度器如下

# 空定位器:不绘制刻度
mp.NullLocator()
# 最大值定位器:
# 最多绘制nbins+1个刻度
mp.MaxNLocator(nbins=3)
# 定点定位器:根据locs参数中的位置绘制刻度
mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10])
# 自动定位器:由系统自动选择刻度的绘制位置
mp.AutoLocator()
# 索引定位器:由offset确定起始刻度,由base确定相邻刻度的间隔
mp.IndexLocator(offset=0.5, base=1.5)
# 多点定位器:从0开始,按照参数指定的间隔(缺省1)绘制刻度
mp.MultipleLocator()
# 线性定位器:等分numticks-1份,绘制numticks个刻度
mp.LinearLocator(numticks=21)
# 对数定位器:以base为底,绘制刻度
mp.LogLocator(base=2)

刻度网格线

绘制刻度网格线的相关API:
mp.grid()可以绘制主刻度的网格线,而ax可以绘制分别绘制主次刻度的网格线。

ax = mp.gca()
#绘制刻度网格线
ax.grid(
    which='',		# 'major'/'minor' <-> '主刻度'/'次刻度' 
    axis='',		# 'x'/'y'/'both' <-> 绘制x或y轴
    linewidth=1, 	# 线宽
    linestyle='', 	# 线型
    color='',		# 颜色
	alpha=0.5		# 透明度
)

案例:绘制曲线 [1, 10, 100, 1000, 100, 10, 1],然后设置刻度网格线,测试刻度网格线的参数。
'o-'是连点成线

y = np.array([1, 10, 100, 1000, 100, 10, 1])
mp.figure('Normal & Log', facecolor='lightgray')
mp.subplot(211)
mp.title('Normal', fontsize=20)
mp.ylabel('y', fontsize=14)
ax = mp.gca()
ax.xaxis.set_major_locator(mp.MultipleLocator(1.0))
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
ax.yaxis.set_major_locator(mp.MultipleLocator(250))
ax.yaxis.set_minor_locator(mp.MultipleLocator(50))
mp.tick_params(labelsize=10)   #设置刻度不同宽度
#主次的网格线设置不同的线粗
ax.grid(which='major', axis='both', linewidth=0.75, 
        linestyle='-', color='orange')
ax.grid(which='minor', axis='both', linewidth=0.25,
        linestyle='-', color='orange')
mp.plot(y, 'o-', c='dodgerblue', label='plot')   #'o-'是连点成线
mp.legend()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第25张图片

半对数坐标

当数值中大多数数值小,偶尔一些数值大,那么坐标轴就会被拉伸,数值小的细节就会看不清,用这个就可以避免这种情况。
y轴将以指数方式递增。 基于半对数坐标绘制第二个子图,表示曲线:[1, 10, 100, 1000, 100, 10, 1]。

mp.figure('Grid', facecolor='lightgray')
y = [1, 10, 100, 1000, 100, 10, 1]
mp.semilogy(y)
mp.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第26张图片

散点图

可以通过每个点的坐标、颜色、大小和形状表示不同的特征值。提前查看样本的特征分布的时候,宏观状态下观察数据的走势。判断是否符合线性预测

身高 体重 性别 年龄段 种族
180 80 中年 亚洲
160 50 青少 美洲

绘制散点图的相关API:

mp.scatter(
    x, 					# x轴坐标数组
    y,					# y轴坐标数组
    marker='', 			# 点型
    s=10,				# 大小
    color='',			# 颜色
    edgecolor='', 		# 边缘颜色
    facecolor='',		# 填充色
    zorder=''			# 图层序号
)

numpy.random提供了normal函数用于产生符合 正态分布 的随机数

n = 100
# 172:	期望值
# 10:	标准差
# n:	数字生成数量
x = np.random.normal(172, 20, n)
y = np.random.normal(60, 10, n)

案例:绘制平面散点图。

mp.figure('scatter', facecolor='lightgray')
mp.title('scatter')
mp.scatter(x, y)
mp.show()

#案例2
n = 300
h = np.random.normal(175,5,n)
w = np.random.normal(70,7,n)
mp.figure('Person',facecolor = 'lightgray')
mp.title('Person')
mp.xlabel('height',fontsize=12)
mp.ylabel('weight',fontsize=12)
mp.grid(linestyle=':')
mp.scatter(h,w,marker='o',s=70,label='person',color='blue')
mp.legend()
mp.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第27张图片

设置点的颜色

mp.scatter(x, y, c='red')			#直接设置颜色
d = (x-172)**2 + (y-60)**2
mp.scatter(x, y, c=d, cmap='jet')	#以c作为参数,取cmap颜色映射表中的颜色值

设置距离均值越近的变成蓝色,距离越远的是另一种颜色,d是一个数组,表示距离均值点的距离,用欧氏距离来表示。cmap中的jet表示一个映射,值越大,颜色就越不蓝色
cmap颜色映射表参照附件:cmap颜色映射表

n = 100
# 172:	期望值
# 10:	标准差
# n:	数字生成数量
x = np.random.normal(172, 20, n)
y = np.random.normal(60, 10, n)
mp.figure('scatter', facecolor='lightgray')
mp.title('scatter')
mp.scatter(x, y, c='red')
d = (x-172)**2 + (y-60)**2
mp.scatter(x, y, c=d, cmap='jet')
mp.show()

《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第28张图片
cmap的颜色映射
《从青铜学到王者》Python数据分析工程师之Matplotlib绘图 02_第29张图片

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