数据可视化包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=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=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=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()

在这里插入图片描述

直方图

直接在上个代码后面加入如下代码即可

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=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()

在这里插入图片描述

  • 5
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据攻城小狮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值