数据可视化包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没有指针和引用是个大问题

Matplotlib--用Python创建各种数据可视化图形

Python数据分析之Matplotlib

Python数据分析-可视化“大佬”之Matplotlib

Python数据可视化——使用Matplotlib创建散点图