数据可视化包Matplotlib
Posted xingweikun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据可视化包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']tushare+matplotlib 简单财务分析
动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题