文章目录
- Matplotlib绘图基础
-
- Matplotlib绘图基本流程
- 中文字符显示
- 坐标轴字符刻度标注
- Matplotlib常用图形绘制
-
- 散点图
- 线性图
- 柱状图
- 直方图
- 饼图
- 箱线图
- 子图
Matplotlib绘图基础 Matplotlib绘图基本流程
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)#创建画布
x=np.linspace(0,1,1000)
plt.subplot(2,1,1)#分为2x1图形阵,选择第一张图片绘图
plt.title('y=x^2&y=x')#添加标题
plt.xlabel('x')#添加x轴名称'x'
plt.ylabel('y')#添加y轴名称'y'
plt.xlim((0,1))#指定x轴范围(0,1)
plt.ylim((0,1))#指定y轴范围(0,1)
plt.xticks([0,0.3,0.6,1])#设置x轴刻度
plt.yticks([0,0.5,1])#设置y轴刻度
plt.plot(x,x**2)
plt.plot(x,x)
plt.legend(['y=x^2','y=x'])#添加图例
plt.savefig('demo01.png')#保存图片
plt.show()
文章图片
中文字符显示
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(0,10,0.2)
y=np.sin(x)
plt.title('sin曲线')
plt.plot(x,y)
plt.savefig('demo02_01.png')
plt.show()
文章图片
可以看到中文标题没有正常显示
修改代码如下:
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(0,10,0.2)
y=np.sin(x)
plt.rcParams['font.sans-serif']='SimHei'#设置字体为SimHei
plt.rcParams['axes.unicode_minus']=False#解决负号"-"显示异常
plt.title('sin曲线')
plt.plot(x,y)
plt.savefig('demo02_02.png')
plt.show()
文章图片
现在中文可以正常显示了
坐标轴字符刻度标注
import numpy as np
import matplotlib.pyplot as plt
x=np.array([1,2,3,4,5,6,7,8])#季度标号
y=np.array([100,104,106,95,103,105,115,100])#销售额
v=['2018年一季度','2018年二季度','2018年三季度','2018年四季度',
'2019年一季度','2019年二季度','2019年三季度','2019年四季度']
plt.rcParams['font.sans-serif']='SimHei'
plt.title('某产品2018-2019各季度销售额')
plt.plot(x,y)
plt.xlabel('季度')
plt.xticks(x,v,rotation=90)#v为与x对应的字符刻度,rotation为旋转角度
plt.ylabel('销售额(万元)')
plt.savefig('demo03.png')
plt.show()
文章图片
Matplotlib常用图形绘制 散点图
'''
使用scatter函数绘制D02车次每日上车人数散点图
'''
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path="车次上车人数统计表.xlsx"
data=https://www.it610.com/article/pd.read_excel(path)
tb=data.loc[data['车次']=='D02',['日期','上车人数']].sort_values('日期')
x=np.arange(1,len(tb.iloc[:,0])+1)
y1=tb.iloc[:,1]
plt.rcParams['font.sans-serif']='SimHei'
plt.scatter(x,y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.xticks([1,5,10,15,20,24],tb['日期'].values[[0,4,9,14,19,23]],rotation=45)
plt.title('D02车次上车人数散点图')
plt.savefig('demo04_D02车次上车人数散点图.png')
plt.show()
文章图片
线性图
'''
绘制D02,D03,D04车次上车人数线性图
'''
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path="车次上车人数统计表.xlsx"
data=https://www.it610.com/article/pd.read_excel(path)
tb1=data.loc[data['车次']=='D02',['日期','上车人数']]
tb1=tb1.sort_values('日期')
tb2=data.loc[data['车次']=='D03',['日期','上车人数']]
tb2=tb2.sort_values('日期')
tb3=data.loc[data['车次']=='D04',['日期','上车人数']]
tb3=tb3.sort_values('日期')
#构造绘图所需的横轴数据列和纵轴数据列
x=np.arange(1,len(tb1.iloc[:,0])+1)
y1=tb1.iloc[:,1]
y2=tb2.iloc[:,1]
y3=tb3.iloc[:,1]
#定义绘图figure(1)
plt.figure(1)
plt.rcParams['font.sans-serif']='SimHei'
plt.plot(x,y1,'r*--')
plt.plot(x,y2,'b*--')
plt.plot(x,y3,'go')
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('上车人数走势图')
plt.legend(['D02','D03','D04'])
plt.xticks([1,5,10,15,20,24],tb1['日期'].values[[0,4,9,14,19,23]],rotation=45)
plt.savefig('demo05_上车人数走势图.png')
plt.show()
文章图片
柱状图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path="车次上车人数统计表.xlsx"
data=https://www.it610.com/article/pd.read_excel(path)
tb=data.loc[data['车次']=='D02',['日期','上车人数']]
tb=tb.sort_values('日期')
x=np.arange(1,len(tb.iloc[:,0])+1)
y1=tb.iloc[:,1]
plt.rcParams['font.sans-serif']='SimHei'#设置字体为SimHei
plt.rcParams['axes.unicode_minus']=False#解决负号"-"显示异常
plt.figure(2)
plt.bar(x,y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('D02车次上车人数柱状图')
plt.xticks([1,5,10,15,20,24],tb['日期'].values[[0,4,9,14,19,23]],rotation=45)
plt.savefig('demo06.png')
plt.show()
文章图片
直方图 【Python数据分析|数据可视化包Matplotlib】直接在上个代码后面加入如下代码即可
plt.figure(3)#注意这个
plt.hist(y1)
plt.xlabel('上车人数')
plt.ylabel('频数')
plt.title('D02车次上车人数直方图')
plt.savefig('demo06_直方图.png')
plt.show()
文章图片
饼图
plt.figure(4)
D=data.iloc[:,0]
D=list(D.unique())#车次号D02~D06
list1=[]#预定义每个车次的上车人数列表
for d in D:
dt=data.loc[data['车次']==d,['上车人数']]
s=dt.sum()
list1.append(s['上车人数'])#或者s[0]
plt.pie(list1,labels=D,autopct='%1.2f%%')#绘制饼图,百分比保留小数点后两位
plt.title('各车次上车人数百分比饼图')
plt.savefig('demo06_饼图.png')
plt.show()
文章图片
箱线图
plt.figure(5)
tb1=data.loc[data['车次']=='D02',['日期','上车人数']]
tb1=tb1.sort_values('日期')
tb2=data.loc[data['车次']=='D03',['日期','上车人数']]
tb2=tb2.sort_values('日期')
y1=tb1.iloc[:,1]
y2=tb2.iloc[:,1]
plt.boxplot([y1.values,y2.values])
plt.xticks([1,2],['D02','D03'])
plt.title('D02,D03车次上车人数箱线图')
plt.xlabel('车次')
plt.ylabel('上车人数')
plt.savefig('demo06_箱线图')
plt.show()
文章图片
子图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
path="车次上车人数统计表.xlsx"
data=https://www.it610.com/article/pd.read_excel(path)
tb1=data.loc[data['车次']=='D02',['日期','上车人数']]
tb1=tb1.sort_values('日期')
tb2=data.loc[data['车次']=='D03',['日期','上车人数']]
tb2=tb2.sort_values('日期')
#构造绘图所需的横轴数据列和纵轴数据列
x=np.arange(1,len(tb1.iloc[:,0])+1)
y1=tb1.iloc[:,1]
y2=tb2.iloc[:,1]
plt.rcParams['font.sans-serif']='SimHei'
plt.figure('子图')
plt.figure(figsize=(10,8))plt.subplot(3,2,1)
plt.scatter(x,y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.xticks([1,5,10,15,20,24],tb1['日期'].values[[0,4,9,14,19,23]],rotation=45)
plt.title('D02车次上车人数散点图')plt.subplot(3,2,2)
plt.plot(x,y1,'r*--')
plt.plot(x,y2,'b*--')
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('上车人数走势图')
plt.legend(['D02','D03'])
plt.xticks([1,5,10,15,20,24],tb1['日期'].values[[0,4,9,14,19,23]],rotation=45)plt.subplot(3,2,3)
plt.bar(x,y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('D02车次上车人数柱状图')
plt.xticks([1,5,10,15,20,24],tb1['日期'].values[[0,4,9,14,19,23]],rotation=45)plt.subplot(3,2,4)
plt.hist(y1)
plt.xlabel('上车人数')
plt.ylabel('频数')
plt.title('D02车次上车人数直方图')plt.subplot(3,2,5)
D=data.iloc[:,0]
D=list(D.unique())#车次号D02~D06
list1=[]#预定义每个车次的上车人数列表
for d in D:
dt=data.loc[data['车次']==d,['上车人数']]
s=dt.sum()
list1.append(s['上车人数'])#或者s[0]
plt.pie(list1,labels=D,autopct='%1.2f%%')#绘制饼图,百分比保留小数点后两位
plt.title('各车次上车人数百分比饼图')plt.subplot(3,2,6)
plt.boxplot([y1.values,y2.values])
plt.xticks([1,2],['D02','D03'])
plt.title('D02,D03车次上车人数箱线图')
plt.xlabel('车次')
plt.ylabel('上车人数')plt.tight_layout()
plt.savefig('子图.png')
plt.show()
文章图片
推荐阅读
- Python实验|Python实验、Pandas数据处理与分析
- python|python数据分析的一些基础性知识(二)
- pytorch|yolov5-gpu版本部署与测试中遇到的问题与解决
- python数学实验与建模|python利用pandas子类构建序列和数据框
- python|第一篇博客,与您共勉
- python|关于举办“2022年(第15届)中国大学生计算机设计大赛”通知
- python|OpenCV绘制图像与文字(可作为脚手架代码)(python) Open_CV系列(四)
- 蓝桥杯|蓝桥杯python(题目思路即解答(笔记,持续更新))
- Python零基础入门--基础(九)-- 装饰器