对于普通用户,使用一次性画图能很快的学习、完成一般场景下作图。
下面是两个简单的例子:
import matplotlib.pyplot as plt
plt.bar(['a','b','c','d','e'], [20,30,10,50,40], color=['b','c','g','k','m'], alpha = .7)
plt.show()
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1 = plt.bar(['a','b','c','d','e'], [20,30,10,50,40], color=['b','c','g','k','m'], alpha = .7)
fig.show()
面向对象作图会显得复杂一些,做出来的图也不太尽人意,当然图是可以调整的。对于普通用户,我推荐使用一次性画图。
1.获得数据、确定作图类型
2.作图
3.调整图(加标签,调大小,调标度… (调整图的函数基本通用)
4.显示图、保存图
图类型:
折线图plot、散点图scatter、直方图hist、柱状图bar、饼状图pie、颜色图colorbar
用法见实例
function | 说明 | 备用栏 |
---|---|---|
figure(figsize=[w,h]) | 调整图像大小,此函数必须放在作图函数前 | w:宽度、h:高度 |
title(‘title’) | 设置图的标题 | title可改为任意字符,中文显示不了 |
xlabel(str, fontsize, color) | 设置x轴的标签 | str:x轴标签、fontsize:字体大小、color:颜色 |
ylabel(str, fontsize, color) | 设置y轴的标签 | str:y轴标签、fontsize:字体大小、color:颜色 |
xlim(min, max) | 设置x轴的范围 | min:最小值、max:最大值 |
ylim(min, max) | 设置y轴的范围 | min:最小值、max:最大值 |
axis(‘off’) | 隐藏坐标轴 | none |
xticks([], rotation = 45) | 隐藏x坐标刻度,旋转x坐标刻度45度 | []为空列表就是隐藏的意思、rotation:旋转角度 |
xticks([], rotation = 45) | 隐藏y坐标刻度,旋转y坐标刻度45度 | []为空列表就是隐藏的意思、rotation:旋转角度 |
grid(True) | 显示网格 | none |
xscale(‘linear|log|symlog|logit’) | 设置x刻度数字的显示方式 | 任意填一个就行 |
yscale(‘linear|log|symlog|logit’) | 设置y刻度数字的显示方式 | 任意填一个就行 |
axhline(y) | 在y=y处画一条线 | none |
axvline(y) | 在x=x处画一条线 | none |
legend(loc = ‘best|[upper] left |right’) | 显示标识 | best自动调整、left左边显示、right右边显示、upper left不记得什么意思了 |
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,21,1) ##产生随机数据
y = np.random.randint(1,50,20) ##产生随机数据
#plt.figure(figsize=[8,4]) ##调整图的大小
plt.plot(x,y,label='add_label') ##基本步骤:作图
#plt.title("plot") ##添加标题
#plt.xlabel('x_axis',fontsize=20,color='c') ##添加x轴信息
#plt.ylabel('y_axis',fontsize=10,color='g') ##添加y轴信息
#plt.xlim(0, 20) ##设置x轴范围
#plt.ylim(-10, 55) ##设置y轴范围
##plt.axis('off') ##不显示坐标轴
#plt.xticks(rotation = 45) ##x坐标轴刻度标签旋转45度
#plt.yticks(rotation = -45) ##y坐标轴刻度标签旋转45度
#plt.grid(True) ##显示网格
#plt.xscale('linear') ##设置x坐标轴刻度数的显示形式
#plt.yscale('linear') ##设置y坐标轴刻度数的显示形式
#plt.axhline(20) ##画水平线
#plt.axvline(10) ##画垂直线
#plt.legend(loc = 'best') ##自动找到最佳位置显示线标识
plt.show() ##显示图片
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,21,1)
y = np.random.randint(1,50,20)
plt.plot(x,y,'*') ##设置样式为*状
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,21,1)
y1 = np.random.randint(1,50,20)
y2 = np.random.randint(1,50,20)
plt.plot(x,y1,'-',x,y2,'--') ##plot可以同时画多组线,最好还是分开画(用两次plot)
#plt.plot(x,y1,'-')
#plt.plot(x,y2,'--')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,21,1)
y = np.random.randint(1,50,20)
#plt.figure(figsize=[8,4])
plt.scatter(x,y,label='add_label')
#plt.title("plot")
#plt.xlabel('x_axis',fontsize=20,color='c')
#plt.ylabel('y_axis',fontsize=10,color='g')
#plt.xlim(0, 20)
#plt.ylim(-10, 55)
##plt.axis('off')
#plt.xticks(rotation = 45)
#plt.yticks(rotation = -45)
#plt.grid(True)
#plt.xscale('linear')
#plt.yscale('linear')
#plt.axhline(20)
#plt.axvline(10)
#plt.legend(loc = 'best')
plt.show()
bins = np.arange(0,100,10)
y = np.random.randint(0,100,60)
#plt.figure(figsize=[8,4])
plt.hist(y,bins,label='add_label') ##y为数值数组,bins为分组,如这里把100分成了10组
#plt.title("plot")
#plt.xlabel('x_axis',fontsize=20,color='c')
#plt.ylabel('y_axis',fontsize=10,color='g')
#plt.xlim(0, 100)
#plt.ylim(0, 20)
##plt.axis('off')
#plt.xticks(rotation = 45)
#plt.yticks(rotation = -45)
#plt.grid(True)
#plt.xscale('linear')
#plt.yscale('linear')
#plt.axhline(12)
#plt.axvline(10)
#plt.legend(loc = 'best')
plt.show()
import matplotlib.pyplot as plt
plt.bar(['a','b','c','d','e'], [10,20,10,80,60], color=['b','c','g','k','m'], alpha=0.8)
plt.show()
import matplotlib.pyplot as plt
plt.barh(['linear regression','logistic regression','svm','decision tree','Random forest'], [.76,.78,.82,.69,.67], color=['b','c','g','k','m'], alpha=0.8)
plt.show()
import matplotlib.pyplot as plt
'''explode是饼块露出来的程度,用分数表示,autopct统计占比'''
plt.pie([554,662,453,42,1023,485],labels=['A','B','C','D','E','other'],explode=[0,0,0,0,.1,0],autopct='%1.1f%%',shadow=True)
plt.axis('equal') ##如果不设置这个参数,画出来的饼是椭圆
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(20,20).flatten()*10
y = np.random.randn(20,20).flatten()*10
color = np.random.randint(0,10,20*20).flatten()
plt.scatter(x, y, c = color) ##颜色图就是画散点图,只是给每个点给标记上颜色
plt.colorbar() ##画完散点图直接使用这条函数就会在散点图的基础上在右边加上一个颜色条
plt.show()
import matplotlib.pyplot as plt
plt.figure(figsize=[8,2])
plt.subplot(131) ##第一个1代表1行,3代表3列,第一个1代表现在我要操作第1个图
plt.plot([1,2,3,4,5,6],[1,2,3,2,1,2])
plt.subplot(132) ##操作第2个图
plt.plot([1,2,3,4,5,6],[1,2,3,2,1,2])
plt.grid(True)
plt.subplot(133) ##操作第3个图
plt.plot([1,2,3,4,5,6],[1,2,3,2,1,2])
#plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.35,wspace=0.35) ##调整各图的距离,避免重叠
plt.show()
使用函数:axes([左边距,下边距,宽,高],facecolor=‘’) ##左边距,下边距,宽,高均为分数
import matplotlib.pyplot as plt
plt.figure(figsize = [10,8])
plt.plot([1,2,3,4,5,6],[1,2,3,2,1,2])
plt.annotate(r'$\mu=100,\ \sigma=15$', xy=(3, 3), xytext=(4, 2.6), arrowprops=dict(facecolor='green',shrink=0.05)) ##添加标签,下面有这条函数的介绍
plt.axes([.17,.65,.2,.2],facecolor='white') ##开启一个画中画
plt.plot([1,2,3,4,5,6],[1,2,3,2,1,2]) ##操作画中画
plt.grid(True)
plt.show()
import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5,6],[1,2,3,2,1,2])
plt.text(3,3,r'$\mu=100,\ \sigma=15$') ##在(3,3)处写上标签
plt.show()
import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5,6],[1,2,3,2,1,2])
##在(4,2.6)处写上标签,用green箭头指向(3,3),shrink越小,箭头越细长
plt.annotate(r'$\mu=100,\ \sigma=15$', xy=(3, 3), xytext=(4, 2.6), arrowprops=dict(facecolor='green',shrink=0.05))
plt.show()
Latex基本用法:
Latex符号位于双$内,数学符号如
σ \sigma σ
用r"$\sigma$"表示,\是转义符
数学符号:
符号 | 表示 | 符号 | 表示 |
---|---|---|---|
σ \sigma σ | sigma | α \alpha α | alpha |
β \beta β | beta | γ \gamma γ | gamma |
δ \delta δ | delta | λ \lambda λ | lambda |
ϵ \epsilon ϵ | epsilon | μ \mu μ | mu |
ε \varepsilon ε | varepsilon | ν \nu ν | nu |
ζ \zeta ζ | zeta | ξ \xi ξ | xi |
η \eta η | eta | π \pi π | pi |
θ \theta θ | theta | ϖ \varpi ϖ | varpi |
ϑ \vartheta ϑ | vartheta | ρ \rho ρ | rho |
ι \iota ι | iota | ϱ \varrho ϱ | varrho |
κ \kappa κ | kappa | σ \sigma σ | sigma |
ς \varsigma ς | varsigma | φ \varphi φ | varphi |
τ \tau τ | tau | χ \chi χ | chi |
υ \upsilon υ | upsilon | ψ \psi ψ | psi |
ϕ \phi ϕ | phi | ω \omega ω | omega |
注:一些字符需要特别转义:# $ % & ~ _ ^ \ { } ( ) [ ] 空格也需要转义
marker | 说明 | marker | 说明 |
---|---|---|---|
‘-’ | 实线样式 | ‘1’ | 下箭头标记 |
‘–’ | 短横线样式 | ‘2’ | 上箭头标记 |
‘-.’ | 点划线样式 | ‘3’ | 左箭头标记 |
‘:’ | 虚线样式 | ‘4’ | 右箭头标记 |
‘.’ | 点标记 | ‘s’ | 正方形标记 |
‘,’ | 像素标记 | ‘*’ | 星形标记 |
‘o’ | 圆标记 | ‘h’ | 六边形标记 1 |
‘v’ | 倒三角标记 | ‘H’ | 六边形标记 2 |
‘^’ | 正三角标记 | ‘+’ | 加号标记 |
‘<’ | 左三角标记 | ‘x’ | X 标记 |
‘>’ | 右三角标记 | ‘D’ | 菱形标记 |
‘_’ | 水平线标记 | ‘d’ | 窄菱形标记 |
color | 说明 | color | 说明 |
---|---|---|---|
‘b’ | 蓝色 | ‘c’ | 青色 |
‘g’ | 绿色 | ‘k’ | 黑色 |
‘m’ | 品红色 | ‘r’ | 红色 |
‘y’ | 黄色 | ‘w’ | 白色 |