Python数据分析|数据可视化包Matplotlib


文章目录

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

Python数据分析|数据可视化包Matplotlib
文章图片

中文字符显示
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()

Python数据分析|数据可视化包Matplotlib
文章图片

可以看到中文标题没有正常显示
修改代码如下:
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()

Python数据分析|数据可视化包Matplotlib
文章图片

现在中文可以正常显示了
坐标轴字符刻度标注
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()

Python数据分析|数据可视化包Matplotlib
文章图片

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

Python数据分析|数据可视化包Matplotlib
文章图片

线性图
''' 绘制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()

Python数据分析|数据可视化包Matplotlib
文章图片

柱状图
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
文章图片

直方图 【Python数据分析|数据可视化包Matplotlib】直接在上个代码后面加入如下代码即可
plt.figure(3)#注意这个 plt.hist(y1) plt.xlabel('上车人数') plt.ylabel('频数') plt.title('D02车次上车人数直方图') plt.savefig('demo06_直方图.png') plt.show()

Python数据分析|数据可视化包Matplotlib
文章图片

饼图
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()

Python数据分析|数据可视化包Matplotlib
文章图片

箱线图
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()

Python数据分析|数据可视化包Matplotlib
文章图片

子图
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数据分析|数据可视化包Matplotlib
文章图片

    推荐阅读