目录
- 1、Matplotlib库
- 2、Figure对象:创建画布:
- 3、划分子图:subplot(行数,列数,子图序号)
- 4、设置中文字体:plt.rcParams["font.sans-serif"]="SimHei"
- 5、添加标题 suptitle、title
- 6、自动调整子图:tight_layout(rect=[lefft,bottom,right,top])
- 7、散点图:scatter(x,y,scale,color,marker,label)
- 8、添加文字: text(x,y,s,fontsize,color)
- 9、增加图例:scatter(x,y,scale,color,marker,label)
- 10、显示图例:legend(loc,fontsize)
- 11、折线图
- 12、柱状图(Bar Chart):
- 13、拓展学习:
1、Matplotlib库
- Matplotlib库:第三方库,快速生成图表(直方图,柱状图,折线图等等
- Matplotlib 的API:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot
- pip安装Matplotlib库
pip install matplotlib
- 导入Matplotlib库
import matplotlib.pyplot as plt
2、Figure对象:创建画布:
figure(num,figsize,dpi,facecolor,edgecolor,frameon)
num:图形编号或名称,值为数字/字符串
figsize:绘图对象的宽和高,单位英寸
dpi:分辨率,默认80
facecolor:背景颜色。
edgecolor:边框颜色
frameon:表示是否显示边框。
颜色:(最后一个字母为其缩写)
蓝色blue b | 黑色black k | 绿色green g | 白色white w |
---|---|---|---|
红色red r | 蓝绿cyan c | 黄色yellow y | 品红magenta m |
例如:
plt.figure(figsize=(3,2),facecolor="green")
plt.plot() #绘制空白图形
plt.show() #显示绘图
注意:在Spyder软件设置单独弹出的窗口的步骤为:
Tools–>Preferences–>IPython console–>Graphics–>Graphics backend–> Backend–>设置成Automatic,如图所示。如果是设置成Inline则figure是在IPython console中显示。最后需要再对Spyder软件进行重新启动,没有重启则不能实现设置效果。figure如图:
3、划分子图:subplot(行数,列数,子图序号)
当3个参数都少于10时,可省逗号。 每创建一个子图要一条语句
fig=plt.figure()
plt.subplot(2,2,1) #等价于plt.subplot(221)
plt.subplot(222)
plt.subplot(223)
plt.show()
4、设置中文字体:plt.rcParams[“font.sans-serif”]=“SimHei”
参数:
- rcParams:运行配置参数run configuration Params,修改绘制图表时的各种默认参数
- font.sans-serif:字体系列
- SimHei:黑体
字体 | 参数 | 字体 | 参数 |
---|---|---|---|
宋体 | SimSun | 楷体 | KaiTi |
黑体 | SimHei | 仿宋 | FangSong |
微软雅黑 | Microsoft YaHei | 隶书 | LiSu |
微软正黑体 | Microsoft JhengHei | 幼圆 | YouYuan |
修改后可再恢复标准默认配置:plt.rcdefaults()
5、添加标题 suptitle、title
全局标题:suptitle(标题文字)
子标题:title(标题文字)
suptitle()函数参数:
参数 | 说明 | 默认值 | 可取值 |
---|---|---|---|
x | 标题位置的x坐标 | 0.5 | |
y 标题位置的y坐标 | 0.98 | ||
color | 标题颜色 | 黑色 | |
backgroundcolor | 背景颜色 | 12 | |
fontsize | 字体大小 | 见下面说明 | |
fontweight | 字体粗细 | normal | 见下面说明 |
fontstyle | 字体类型 | normal/italic/oblique | |
horizontalalignment | 标题水平对齐方式 | center left/right/center | |
verticalalianment | 标题垂直对齐方式 top | center/top/bottom/baseline |
说明:
- fontsize可取值: xx-small、x-small、small、medium、large、x-large、xx-large
- fontweight可取值:light、normal、medium、semiboldbold、heavy、black
- title()函数主要参数:
参数 | 说明 | 取值 |
---|---|---|
loc | 位置 | left,right |
rotation | 标题文字旋转角度 | |
color | 标题颜色 | 黑色 |
fontsize | 字体大小 | |
fontweight | 字体粗细 | normal |
fontstyle | 字体类型 | |
horizontalalignment | 标题水平对齐方式 | center |
verticalalianment | 标题垂直对齐方式 | top |
fontdict | 设置参数字典 |
6、自动调整子图:tight_layout(rect=[lefft,bottom,right,top])
- 四个参数是子图占绘图区域的相对位置(使全局标题与子图不重叠)
- 完整定义:tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)
- 当tight_layout自动调整失效时,不妨手动设h_pad(Padding (height/width) between edges of adjacent subplots, as a fraction of the font size.)设置上下边缘区域。
例如:
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "SimHei"
fig = plt.figure(facecolor = "lightgrey")
plt.subplot(2, 2, 1)
plt.title('子标题1')
plt.subplot(2, 2, 2)
plt.title('子标题2', loc = "left", color = "b")
plt.subplot(2, 2, 3)
myfontdict={"fontsize":12, "color":"g", "rotation": 30}
plt.title('子标题3',fontdict= myfontdict)
plt.subplot(2, 2, 4)
plt.title('子标题4 ', color='white', backgroundcolor="black")
plt.suptitle("全局标题", fontsize = 20, color = "red", backgroundcolor = "yellow")
plt.tight_layout(rect=[0,0, 1,0.9])
plt.show()
效果图:
7、散点图:scatter(x,y,scale,color,marker,label)
参数 | 说明 | 默认值 |
---|---|---|
x | x坐标 | 不可省略 |
y | y坐标 不可省略 | |
scale | 数据点的大小 | 36 |
color | 数据点的颜色 | |
marker | 数据点的样式 | o(圆点) |
label | 图例文字 | |
cmap | 颜色列表(colormap) |
- 颜色取值:(当有多组数据,需要多种颜色时,可设置cmap,详见Python笔记10)
|颜色 |缩略字符 |颜色 |缩略字符|
|–|--|–|--|
|blue| b |black| k
|green |g |white |w
|red |r |cyan |c
|yellow |y |megenta| m - marker参数:
取值 | 意义 | 取值 | 意义 | 取值 | 意义 |
---|---|---|---|---|---|
- | 实线 | 1 | 朝上的三角 | v | 朝上的三角 |
– | 虚线 | 2 | 朝下的三角 | ^ | 朝下的三角 |
-. | 点线 | 3 | 朝左的三角 | < | 朝左的三角 |
: | 点虚线 | 4 | 朝右的三角 | > | 朝右的三角 |
. | 点 | s | 正方形 | D | 钻石形 |
, | 像素 | p | 五角形 | d | 小版钻石形 |
o | 圆形 | * | 星型 | | | 垂直线形 |
+ | +号 | h | 1号六角形 | - | 水平线形 |
x | x号 | H | 2号六角形 |
- 例如:绘制正态分布:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']="SimHei" #字体,正常显示中文
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
n=1024 #1024个点
x=np.random.normal(0,1,n) #x轴坐标
y=np.random.normal(0,1,n) #y轴坐标
plt.scatter(x,y,color="blue",marker='*') #绘制散点图,蓝色星型
plt.title("标准正态分布",fontsize=20) #标题
注意:如果不加上上面第3、4行,则中文和负号变为□,正常显示如下:
8、添加文字: text(x,y,s,fontsize,color)
其中:
x坐标、y坐标、显示的文字、字体大小(默认12)、字体颜色(默认黑色)
- 坐标轴设置:
使负数的负号正常显示:
plt.rcParams["axes.unicode_minus"]=False
- 其他函数:
函数 | 说明 |
---|---|
xlabel(x,y,s,fontsize,color) | 设置x轴标签(x,y,s与text函数同义) |
ylabel(x,y,s,fontsize,color) | 设置x轴标签 |
xlim(xmin,xmax) | 设置x轴坐标的范围 |
ylim(xmin,xmax) | 设置y轴坐标的范围 |
ck_params(labelsize) | 设置刻度文字的字号 |
xticks() | 设置x轴的刻度: |
yticks() | 设置y轴的刻度: |
- 一些例子:https://blog.csdn.net/wei18791957243/article/details/83865907
https://blog.csdn.net/helunqu2017/article/details/78650782
在上一个代码基础上:
plt.text(2.5,2.5,"均 值:0\n标准差:1") #设置文本
plt.xlim(-4,4) #设置坐标轴范围
plt.ylim(-4,4)
plt.xlabel('横坐标x',fontsize=14) #设置坐标轴标签
plt.ylabel('横坐标y',fontsize=14)
程序最后显示图像可能需要加上:
plt.show()
8.1、完整代码:
import matplotlib.pyplot as plt #导入绘图库
import numpy as np #导入numpy库
plt.rcParams['font.sans-serif']="SimHei" #设置正常显示文字
plt.rcParams['axes.unicode_minus']=False #设置正常显示负号
n=1024 #随机生成点数:1024
x=np.random.normal(0,1,n) #生成数据点的x坐标
y=np.random.normal(0,1,n) #生成数据点的y坐标
plt.scatter(x,y,color="blue",marker='*') #绘图(描点)
plt.title("标准正态分布",fontsize=20) #标题
plt.text(2.5,2.5,"均 值:0\n标准差:1") #显示文本(用作图标)
plt.xlim(-4,4) #x轴范围
plt.ylim(-4,4) #y轴范围
plt.xlabel('横坐标x',fontsize=14) #x轴标签文本
plt.ylabel('横坐标y',fontsize=14) #y轴标签文本
plt.show() #显示绘图
- 绘制标准正态分布、均匀分布:
import matplotlib.pyplot as plt #导入绘图库
import numpy as np #导入numpy库
plt.rcParams['font.sans-serif']="SimHei" #设置正常显示文字
plt.rcParams['axes.unicode_minus']=False #设置正常显示负号
n=1024 #随机生成点数:1024
x1=np.random.normal(0,1,n) #正态分布数据点的xy坐标值
y1=np.random.normal(0,1,n)
x2=np.random.uniform(-4,4,(1,n)) #随机分布数据点的xy坐标值
y2=np.random.uniform(-4,4,(1,n))
plt.scatter(x1,y1,color="blue",marker='*') #正态分布绘图(描点)
plt.scatter(x2,y2,color="yellow",marker='o') #均匀分布绘图(描点)
plt.title("标准正态分布与均匀分布",fontsize=20) #标题
plt.xlabel('横坐标x',fontsize=14) #x轴标签文本
plt.ylabel('横坐标y',fontsize=14) #y轴标签文本
plt.show()
8.1.1、效果图片:
9、增加图例:scatter(x,y,scale,color,marker,label)
label指定图例内容,x、y可以是NumPy数组、张量等等
10、显示图例:legend(loc,fontsize)
loc参数:指定图例位置,具体如下表:
取值 | 图例位置 | 取值 | 图例位置 |
---|---|---|---|
0 | best | 6 | center left |
1 | upper right | 7 | center right |
2 | upper left | 8 | lower center |
3 | lower left | 9 | upper center |
4 | lower right | 10 | center |
5 | right |
10.1、完整代码:
import matplotlib.pyplot as plt #导入绘图库
import numpy as np #导入numpy库
plt.rcParams['font.sans-serif']="SimHei" #设置正常显示文字
plt.rcParams['axes.unicode_minus']=False #设置正常显示负号
n=1024 #随机生成点数:1024
x1=np.random.normal(0,1,n) #正态分布数据点的xy坐标值
y1=np.random.normal(0,1,n)
x2=np.random.uniform(-4,4,(1,n)) #随机分布数据点的xy坐标值
y2=np.random.uniform(-4,4,(1,n))
plt.scatter(x1,y1,color="blue",marker='*',label="正态分布") #正态分布绘图(描点)
plt.scatter(x2,y2,color="yellow",marker='o',label="均匀分布") #均匀分布绘图(描点)
plt.legend() #设置图例位置,也可以固定位置在右上角plt.legend(loc=1),默认0
plt.title("标准正态分布与均匀分布",fontsize=20) #标题
plt.xlim(-4,4)
plt.ylim(-4,4)
plt.xlabel('横坐标x',fontsize=14) #x轴标签文本
plt.ylabel('横坐标y',fontsize=14) #y轴标签文本
plt.show()
10.2、效果图:
11、折线图
plot(x,y,color,marker,label,linewidth,markersize)
-
参数说明:
|参数 |说明 |默认值|
|–|--|–|
|x| 数据点的x坐标| 1,2,3,…|
|y |数据点的y坐标 |不可省略|
|color |数据点的颜色 |
|marker |数据点的样式 |o’(圆点)|
|label |图例文字 |
|linewidth |折线的宽度 |
|markersize |数据点的大小 | -
绘制如下温度湿度折线图:
11.1、完整代码:
import matplotlib.pyplot as plt #导入绘图库
import numpy as np #导入numpy库
plt.rcParams['font.sans-serif']="SimHei" #设置正常显示文字
plt.rcParams['axes.unicode_minus']=False #设置正常显示负号
n=24 #随机生成点数:24
y1=np.random.randint(27,37,n) #正态分布数据点的xy坐标值
y2=np.random.randint(40,60,n)
plt.plot(y1,label='温度') #2组数据的标签
plt.plot(y2,label='湿度')
plt.xlim(0,23)
plt.ylim(20,70)
plt.xlabel('小时',fontsize=12) #x轴标签文本
plt.ylabel('测量值',fontsize=12) #y轴标签文本
plt.title("24小时温度湿度统计",fontsize=16) #标题
plt.legend() #设置图例位置,也可以固定位置在右上角plt.legend(loc=1),默认0
plt.show()
12、柱状图(Bar Chart):
bar(left,height,width,facecolor,edgecolor,label)
其中left、height是两个数字序列,分别表示每一个柱子(柱状图有多个“柱子”)的左起始边界和高度,width宽度,facecolor柱子、edgecolor边界颜色、label标签
import matplotlib.pyplot as plt #导入绘图库
#import numpy as np #导入numpy库
plt.rcParams['font.sans-serif']="SimHei" #设置正常显示文字
plt.rcParams['axes.unicode_minus']=False #设置正常显示负号
#用于柱状图每个数据的高度的“序列”
y1=[25, 22, 26, 43, 21, 17, 34, 40, 17, 36, 41, 38]
y2=[-35, -25, -26, -44, -36, -23, -28, -38, -31, -18, -35, -36]
#bar绘图,其中“range(len(y1))”自动获取数组y1、y2的个数
plt.bar(range(len(y1)),y1,width=0.8,facecolor='g',edgecolor='w',label='统计量1')
plt.bar(range(len(y2)),y2,width=0.8,facecolor='r',edgecolor='b',label='统计量2')
plt.title("柱状图",fontsize=20) #标题
plt.legend() #设置图例位置,也可以固定位置在右上角plt.legend(loc=1),默认0
plt.show()
12.1、效果图:
13、拓展学习:
Matplotlib官网:
- 点击图片即可有详细代码: