Matplotlib包的使用

Matplotlib是一个二维绘图包,能够进行简单的数据可视化
主要有四个层次:canvas(画板) figure(画布) axes(子图) 图表信息(构图元素) 

下面是使用Matplotlib的代码展示:

# -*- coding: utf-8 -*-

#Matplotlib是一个二维绘图包,能够进行简单的数据可视化
#主要有四个层次:canvas(画板) figure(画布) axes(子图) 图表信息(构图元素)
 
import matplotlib.pyplot as plt #画图表 [曲线图]  注意:画图时每一个样本都要是数组类型
import numpy as np

# 1 画一个曲线图
plt.figure(1) #创建1个画布
plt.subplot(2,1,1) #将画布分为2*1图形阵,并选择第一个图片

#pyplot中的属性 title标题、 xlabel x轴名称、 ylabel y轴名称、 
#xlim x轴的范围、 ylim y轴的范围、 xticks x轴刻度的数目与取数、
# yticks x轴刻度的数目与取数、 legend 指定当前图形图例(大小、位置、标签)

plt.title("y=x & y=x^2 & y=x/4") #增添标题
x=np.linspace(0,1,100)  #将x变成列表 值为(0,2)分割成100个样本的点 x存样本点

plt.xlabel('x') #各个轴的名字
plt.ylabel('y')

plt.xlim((0,2)) # lim 各个轴上的起点和终点
plt.ylim((0,2))

plt.xticks([0,0.3,0.6,1,1.2,1.5,1.7,2]) #ticks 各个轴上要表示出来的分段点
plt.yticks([0,0.3,0.6,1,1.2,1.5,1.7,2])

plt.plot(x,x**2) #方程的设置 (x的值,y的值)
plt.plot(x,x+1)
plt.plot(x,x/4)
plt.legend(['y=x**2','y=x+1','y=x/4'])  #用颜色标识不同的曲线

plt.savefig("1.png") #保存图片 保存在"1.png"文件
plt.show()

# 2 中文字符的表示  直接输入就行 没什么区别
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("y=sin(x)曲线")

plt.plot(x,np.sin(x))
plt.savefig('y=sin(x)曲线.png')
plt.show()
plt.title("text图像")
plt.plot(x,-x/4)  # 当没有设置其他值时会根据曲线自动生成相应步长和上下限
plt.show()

# 3 坐标轴字符刻度标注
x=np.arange(1,9)
y=np.array([100,104,106,95,103,105,115,100]) 
plt.rcParams["font.sans-serif"]='SimHei'
plt.title("某产品2018-2019各季度销售额")

plt.plot(x,y)
# plt.subplots_adjust(left=0.4, bottom=0.8)  #当无法显示xy名字时 考虑设置图表的尺寸 将xy的名字表示出来 left<=0.5 bottom<0.9
plt.xlabel('季度标号')
plt.ylabel('销售额(万元)')
plt.show()

v=['2018第一季度','2018第二季度','2018第三季度','2018第四季度','2019第一季度','2019第二季度','2019第三季度','2019第四季度']
plt.rcParams["font.sans-serif"]="SimHei"
plt.title("某产品2018-2019各季度销售额")
plt.plot(x,y)
plt.xticks(x,v,rotation=45)# rotation=45 表示旋转45°  v是列表,表示x轴各分段点的名称
plt.savefig('某产品2018-2019各季度销售额.png')  #savefig 保存图片要在 show()图片前面 show之后图片中的信息被丢失
plt.show()

# 其他图的绘制
#Matplotlib 还可以绘制 散点图(scatter)、线性图(plot)、柱状图(bar)、直方图(hist)、饼图(pie)、箱线图(boxplot)、子图
import pandas as pd

# 4 散点图
path="一、车次上车人数统计表.xlsx"
data=pd.read_excel(path)
tb=data.loc[data['车次']=='D02',['日期','上车人数']].sort_values('日期')
x=np.arange(1,len(tb.iloc[:,0])+1)
y=tb.iloc[:,1]
plt.rcParams['font.sans-serif']='SimHei'

plt.scatter(x,y,0.5,'red')  #使用scatter(x样品,y样品,透明度,颜色) 来绘制散点图
plt.xlabel("日期")
plt.ylabel("上车人数")
plt.xticks([1,5,10,15,24])
plt.title("D02车次上车人数统计散点图")
plt.savefig("D02车次上车人数统计散点图.png")
plt.show()

# 5 线性图
#颜色 现状 线型
#r*--表示星型,红色,虚线图
#bo  表示圆形,蓝色,实线图
tb=data.loc[data['车次']=='D02',['日期','上车人数']].sort_values('日期')
tb1=data.loc[data['车次']=='D03',['日期','上车人数']].sort_values('日期')
x=np.arange(1,len(tb.iloc[:,0])+1)
y1=tb.iloc[:,1]
y2=tb1.iloc[:,1]
# 6 定义绘图figure界面
plt.rcParams["font.sans-serif"]='SimHei'

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],tb['日期'].values[[0,4,9,14,19,23]],rotation=45)
plt.savefig("上车人数走势图.png")
plt.show()

# 7 柱状图
plt.figure(2)

plt.bar(x,y1)  #以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("D02车次上车人数柱状图.png")
plt.show()

# 8 直方图
plt.figure(3)  #重新绘制一个画布,避免相互覆盖

plt.hist(y1)  #绘制直方图
plt.xlabel("上车人数")
plt.ylabel("频数")
plt.title("D02车次人数直方图")
plt.savefig("D02车次人数直方图.png")
plt.show()

# 9 饼图
D=data.iloc[:,0]
D=list(D.unique())  #定义车次号
plt.figure(4)
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('各车次上车人数百分比饼图.png')
plt.show()


# 10 箱线图
plt.figure(5) #创建幕布,figure(n)用图画(或图形等)描绘

plt.boxplot([y1.values,y2.values]) #绘制箱线图
plt.xticks([1,2],['D02','D03'],rotation=90)
plt.ylabel("上次人数")
plt.xlabel("车次")
plt.savefig("箱线图.png")
plt.show()

# 11 子图 subplot(a,b,c) 
plt.rcParams['font.sans-serif']="SimHei"
plt.figure('子图')
plt.figure(figsize=(10,8))  #将子图分为10*8的子图部分 figsize(n*m)表示设置子图的大小

plt.subplot(3,2,1)
plt.scatter(x,y1)
plt.title('散点图')

plt.subplot(3,2,2)   #使用 subplot 用来创建子图
plt.plot(x,y1,'r*')
plt.plot(x,y2,'bo--')
plt.title("走势图")

plt.subplot(3,2,3)
plt.bar(x,y1)
plt.title("柱状图")

plt.subplot(3,2,4)
plt.hist(y1)
plt.title("直方图")

plt.subplot(3,2,5)
plt.pie(list1,labels=D,autopct='%1.2f%%')
plt.title("饼图")

plt.subplot(3,2,6)
plt.boxplot([y1.values,y2.values])
plt.title("箱线图")

plt.tight_layout()  #作用:自动调整子图之间的间距和大小,使它们更加紧凑和美观

plt.savefig("子图.png")
plt.show()

猜你喜欢

转载自blog.csdn.net/2401_84448191/article/details/138371351