python数据可视化工具--matplotlib库详细讲解笔记

matplotlib库是python中绘制二维,三维图表的数据可视化工具,在2D绘图领域使用最广。

matplotlib绘图的主要功能是绘制x,y坐标图,其特点是:
使用简单绘图语句实现复杂绘图效果;
以交互操作实现渐趋精细的图像效果;
使用嵌入式的LaTeX输出具有印刷级别的图表,科学表达式和符号文本;
对图标的组成元素实现精细化控制。

使用matplotlib本质上有两种方法:
显式创建图形和轴,并在其上调用方法(面向对象(oo)样式);
依靠pyplot自动创建和管理图形和轴,并使用pyplot函数进行绘图。

pyplot限制为交互式绘图,模块虽然用法简单,但不适合在较大的应用程序中使用。
OO样式进行非交互式绘图,但用于较大项目的一部分重复使用的函数和脚本中。

本文主要讲解交互式绘图。
如果想深入学习更多绘图技能可参考matplotlib官网:matplotlib官网
由于大部分绘图功能是在matplotlib.pyplot中,且使用时经常要与Nnmpy组件搭配使用,常用导入命令:

import matplotlib.pyplot as pyt
import numpy as np 

一,常用函数及其参数

plt.title()  图形标题

plt.xlabel() x坐标标题
plt.ylabel() yz坐标标题

plt.xlim(mix,max) 设置x坐标范围
plt.ylim(min,max) 设置y坐标范围

plt.legend(loc="lower left") 显示图示,图中表示每条曲线的标签和样式的矩形区域(图例的位置)
plt.show() 显示绘图窗口

plt.savefig("file.png",dpi=120) 保存文件并设置其分辨率
plt.grid(linestyle=":",color="r") 绘制刻度的网格线

plt.axhline(y=0.0,c="r",ls="--",lw=2) 绘制平行x轴的水平参考线
plt.axvline(x=4.0,c="b",ls="--",lw=2) 绘制平行y轴的水平参考线

plt.axhspan(xmin=1.0,xmax=2.0,facecolor="y",alpha=0.3)
绘制垂直于y轴的参考区域(起始值,中止值,区域颜色,透明度)
plt.axvspan(xmin=1.0,xmax=2.0,facecolor="y",alpha=0.3)
绘制垂直于x轴的参考区域

annatate()  添加图形内容细节的指向型注释文本
plt.annotate(string,xy=(np.pi/2,1.0),xytext=((np.pi/2)+0.15,1.5),weight="blod",
color="b",arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))
string:图形内容的注释文本
xy:被注释图形内容的位置坐标
xytext:注释文本的位置坐标
weight:注释文本的字体粗细风格
color:注释文本的字体颜色
arrowprops:指示被注释内容的箭头的属性字典

text()  添加图形内容细节的无指向性注释文本
plt.text(x,y,string,weight="bold",color="r")
(注释横坐标,注释纵坐标,注释内容,注释字体风格,字体颜色)

样例:

import matplotlib.pyplot as plt 
import numpy as np 
from pylab import *     #导入模块设置中文参数。
rcParams['font.sans-serif'] = ['SimHei']    #指定中文字体
rcParams['axes.unicode_minus'] = False     #解决图像中负号显示为方块的问题
x = np.linspace(1,10,50)
y = np.sin(x)

plt.plot(x,y,label="曲线图",color="red",lw=1.0,ls="--")
plt.legend(loc="upper left")

plt.xlim(2,9)     #设置x,y轴的数值范围
plt.ylim(-1,1)

plt.xlabel("x数轴")   #设置x,y轴的标签文本
plt.ylabel("y数轴")

plt.grid(linestyle=":",color="r")   #绘制网格线

plt.axvline(x=4.6,c="g",ls="--",lw=2)   #绘制参考线
plt.axhline(y=0.0,c="g",ls="--",lw=2)

plt.axvspan(xmin=4.0,xmax=6.0,facecolor="y",alpha=0.2)    #绘制参考区域
plt.axhspan(ymin=-0.5,ymax=0.5,facecolor="y",alpha=0.2)

plt.annotate("最大值",xy=(7.8,1.0),xytext=(6.2,0.8),
  weight="bold",color="m",arrowprops=dict(arrowstyle="->",
    connectionstyle="arc3",color="b",lw=2))     #指向型注释

plt.text(6.5,0.1,"方程式y=sin(x)",weight="bold",color="b") #无指向型注释

plt.title("方程式y=sin(x)曲线图") #图形标题
plt.show()

样例效果:在这里插入图片描述

需要显示中文的另一种方法:
找到matplotlib\mpl-data文件夹下的matplotlibrc文件。
找到文本行 #font.sans-serif: …
修改为 #font.sans-serif: SimHei,…

二,图形绘制

1,plot() 曲线图 展现变量的趋势变化

plt.plot(x,y,ls="-",lw=2,label="plot figure")

参数及说明(参数用逗号隔开,除必选项,其他参数位置可变)

x or y:x或y轴上的数值(必选项);
color:线条颜色,默认为蓝色。
linestyle or ls:线条样式,可选值有"-"(实线),"--"(虚线),"-."(虚点线)及":"(点线),默认为"-";
linewidth or lw:线条宽度,默认为1.0;
label:图片名称,需要搭配legend方法使用才有效果;

注意:所有程序在交互模式下输入可能无法实现

import matplotlib.pyplot as plt 
listx = [1,5,7,9,13,16]
listy = [15,50,80,40,70,50]
plt.plot(listx,listy,label="food",color="red",lw=5.0,ls="--")
plt.legend()
plt.show()

在这里插入图片描述

同时绘制多个曲线图形

import matplotlib.pyplot as plt 
listx1 = [1,5,7,9,13,16]
listy2 = [15,50,80,40,70,50]
plt.plot(listx1,listy2,color="red",lw=4.0,ls="--",label="style1")
listx2 = [2,6,8,11,14,16]
listy2 = [10,40,30,50,80,60]
plt.plot(listx2,listy2,lw=2.0,ls="-.",color="green",label="style2")
plt.legend()
plt.show()

在这里插入图片描述

2,scatter() 散点图 寻找变量之间的关系

plt.scatter(x,y,c="b",label="scatter figure")

c:散点图中标记的颜色

颜色简称

别名/颜色   	
b	蓝色  
g	绿色
r	红色  
y	黄色
c	青色
k	黑色   
m	洋红色 
w	白色

其他描述方式:
1,使用HTML十六进制字符串 color=’#123456’ 使用合法的HTML颜色名字(’red’,’chartreuse’等);
2,可以传入一个归一化到[0,1]的RGB元祖。 color=(0.3,0.3,0.4).

import matplotlib.pyplot as plt 
import numpy as np 
from pylab import *     #导入模块设置中文参数。
rcParams['font.sans-serif'] = ['SimHei']
x = np.linspace(1,8,200)
y = np.random.rand(200)
plt.scatter(x,y,c="c",label="散点图")
plt.legend()
plt.show()

在这里插入图片描述

3,bar() 柱状图
plt.bar(x,y)
在x轴上绘制定性数据的分布特征

import matplotlib as mpl 
import matplotlib.pyplot as plt

mpl.rcParams['font.sans-serif'] = ['SimHei']    #指定中文字体
mpl.rcParams['axes.unicode_minus'] = False     #解决图像中负号显示为方块的问题

a = [20,40,60,80,100]
b = [78,85,60,90,40]

plt.bar(a,b,align="center",color="c",tick_label=["语文","数学","英语","体育","音乐"],width=10.0,hatch="/")

plt.xlabel("各科成绩")
plt.ylabel("成绩等级")

plt.legend()
plt.show()

在这里插入图片描述

4,barh() 条型图

plt.barh(x,y)
在y轴上绘制定性数据的分布特征

与柱状图绘制相同,仅将函数替换即可。

5,hist() 直方图
hist(x)
与柱状图的区别是:直方图仅提供x轴的一组数据(必选项)。

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['font.sans-serif'] = ['SimHei']    
mpl.rcParams['axes.unicode_minus'] = False

np.random.seed(19680801)
mu = 100  
sigma = 15  
x = mu + sigma * np.random.randn(437)

num_bins = 60	
fig, ax = plt.subplots()

n, bins, patches = plt.hist(x, num_bins, density=True,facecolor="g",alpha=0.8)

plt.xlabel('聪明度')
plt.ylabel('概率分布')
plt.title(r'智商直方图: $\mu=100$, $\sigma=15$')

plt.show()

在这里插入图片描述

6,pie() 披萨图

plt.poe(x)
绘制定性数据的不同类别百分比

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['font.sans-serif'] = ['SimHei']    
mpl.rcParams['axes.unicode_minus'] = False

x = [90,80,60,50,70]
country_name=["中国","美国","德国","日本","其他"]
plt.pie(x,labels=country_name)

plt.title("世界各国得分占比")
plt.show()

在这里插入图片描述

7,polar() 极坐标图

plt.polar(theta,r)   在极坐标轴上绘制折线图

theta:每个标记所在射线与极径的夹角
r:每个标记到原点的距离

import numpy as np
import matplotlib.pyplot as plt
a = 12
theta = np.linspace(0.0,5,a,endpoint=False)
r = 30*np.random.rand(a)

plt.polar(theta,r)
plt.show()

在这里插入图片描述

8,scatter() 气泡图

plt.scatter(x,y)

利用气泡大小展示三维数据

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['font.sans-serif'] = ['SimHei']    
mpl.rcParams['axes.unicode_minus'] = False
	
a = np.random.randn(50)
b = np.random.randn(50)

plt.scatter(a,b,s=np.power(5*a+10*b,2),c=np.random.rand(50),cmap=mpl.cm.RdYlBu,marker="o")

plt.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41952762/article/details/108647549