Python记5(Marplotlib数据可视化1---基础篇

1、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标题垂直对齐方式 topcenter/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)

参数说明默认值
xx坐标不可省略
yy坐标 不可省略
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圆形*星型|垂直线形
++号h1号六角形-水平线形
xx号H2号六角形
  • 例如:绘制正态分布:
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轴的刻度:

在上一个代码基础上:

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参数:指定图例位置,具体如下表:

取值图例位置取值图例位置
0best6center left
1upper right7center right
2upper left8lower center
3lower left9upper center
4lower right10center
5right

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官网:

请添加图片描述
请添加图片描述

  • 点击图片即可有详细代码:
    请添加图片描述
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值