注:编码中用到的国民生产总值的数据可以在国家数据网站获得。
matplotlib图像可以分为如下四层结构:
1.canvas(画板):位于最底层,导入库时就存在。
2.figure(画布):在画板之上,从这一层开始设置参数。
3.axes(子图):将画布分为不同块,实现分面绘图。
4.图表信息(构图元素):添加或修改axes上的构图信息。
一、编码风格
1.基础流程
(1)导入模块
from matplotlib import pyplot as plt
(2)创建画布和子图
pic=plt.figure(figsize=(20,12))#设置画布尺寸
ax1=pic.add_subplot(2,1,1)#将画布划分为2*1的图阵,并选择第一张。
(3)添加画布内容
title标题xlabelx轴名称ylabely轴名称xlimx轴范围ylimy轴范围xticksx轴刻度的数目和取值yticksy轴刻度的数目和取值legend图例
(4)图形保存和展示
plt.savefig('filepath')#保存
plt.show()#展示
补充:pic.text(x,y,text)函数可以用来在图形的指定位置添加文本标注。
2.绘图风格
pyplot的子模块style里面定义了许多预设风格。可以通过print(plt.style,available)查看所有预设风格名称。
print(plt.style.available)
>
['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
使用plt.style.use函数使用风格:
plt.style.use('bmh')
二、动态rc参数
1.线条常用的rc参数
lines.linewidth宽度,取值0-10,默认为1.5lines.linestyle样式,可取”-“;”–“;”-.”;”:”四种,默认为”-“lines.marker线条上点的形状,可取”o”,”D”,”h”,”.”,”S”等lines.markersize点的大小,0-10,默认为1.
plt.rcParams['lines.linestyle']=':'
plt.rcParams['lines.linewidth']=6
2.坐标轴常用的rc参数
axes.facecolor背景颜色,接收颜色简写字符,默认为’w’axes.edgecolor边线颜色,接收颜色简写字符,默认为’k’axes.linewidth轴线宽度,接收0-1的float,默认为0.8.axes.grid添加网格,boolaxes.titlesize标题大小,”small”,”medium”,”large”,默认为”large”axes.labelsize轴标大小,默认为”medium”axes.labelcolor轴标颜色,默认为”k”axes.spines.{left,right,top,bottom}添加坐标轴,bool,默认为Trueaxes.{x,y}margin轴余留,接收float,默认为0.05.
plt.rcParams['axes.edgecolor']='b'
plt.rcParams['axes.grid']=True
plt.rcParams['axes.spines.top']=False#去除顶坐标
3.字体常用的rc参数
首先修改参数使其可以正常显示中文字符:
plt.rcParams['font.sans-serif']='SimHei' #设置字体
plt.rcParams['axes.unicode_minus']=False #解决负号显示异常问题
font.family字体族,每一个族对应多种字体font.style字体风格,normal(正常),italic(罗马体),oblique(斜体)font.size字体大小,float,默认为10.font.weight字体重量font.stretch字体延伸font.variant字体变化
三、散点图
散点图有以下特点:
1.表现特征之间是否存在数值或者数量的关联趋势,关联趋势是线性还是非线性的。
2.凸显离群点及其对总体的影响。
3.数据量越大发挥的作用越好。
函数:plt.scatter
常用参数:
x,y接收array,x轴与y轴对应的数据。s接收数值或者一维array,表示点的大小。c接收颜色或者一维array,点的颜色,array表示每个点的颜色。markerstr,点的形状。alpha0-1,透明度。
x=np.arange(16)
y=x**2
plt.figure(figsize=(10,8))
plt.rcParams['font.sans-serif']='SimHei' #设置字体
plt.rcParams['axes.unicode_minus']=False #解决负号显示异常问题
plt.scatter(x,y,marker='D')
plt.xlabel('数值')
plt.ylabel('平方')
plt.title('y=x^2的图像')
import pandas as pd
data=pd.read_excel('季度数据.xls')
y1=data['国内生产总值当季值(亿元)']
y2=data['第一产业增加值当季值(亿元)']
y3=data['第二产业增加值当季值(亿元)']
y4=data['第三产业增加值当季值(亿元)']
x=data['指标'][::-1]
plt.figure(figsize=(10,8))
#解决中文无法显示
plt.rcParams['font.sans-serif']='SimHei' #设置字体
plt.rcParams['axes.unicode_minus']=False #解决负号显示异常问题
plt.title('近18个季度各产业生产总值')
plt.scatter(x,y1)
plt.scatter(x,y2)
plt.scatter(x,y3)
plt.scatter(x,y4)
plt.xticks(rotation=45)
plt.legend(['国内生产总值','第一产业增加值','第二产业增加值','第三产业增加值'])
plt.show()
四、折线图
一般用于展示某一特征随时间变化趋势。
函数:plt.plot()
常用参数:
x,ycolor线条颜色linestyle线条类型marker点的形状alpha透明度
常用颜色:
b蓝色g绿色r红色c青色m品红y黄色k黑色w白色
plt.rcParams['font.sans-serif']='SimHei' #设置字体
plt.rcParams['axes.unicode_minus']=False #解决负号显示异常问题
plt.figure(figsize=(10,8))
y1=data['第一产业增加值累计值(亿元)'][::-1][::4]#先把数据逆序排列,再每间隔四个取一次值以只绘制第一季度数据
y2=data['第二产业增加值累计值(亿元)'][::-1][::4]
y3=data['第三产业增加值累计值(亿元)'][::-1][::4]
plt.plot(range(len(y1)),y1,linestyle='-.')
plt.plot(range(len(y2)),y2,linestyle='--')
plt.plot(range(len(y3)),y3)
plt.xlabel('年份')
plt.ylabel('生产总值(亿元)')
plt.xticks(range(len(y3)),data['指标'][::-1][::4],rotation=45)
plt.title('各产业近十年第一季度生产总值折线图')
plt.legend(['第一产业','第二产业','第三产业'])
plt.show()
五、饼图
用于表现不同类别的占比情况。
函数:plt.pie()
常用参数:
xarraylabelarray,每一项的名称。color颜色autopct指定数值的显示方式。pctdistancefloat,指定每一项的比例和距离饼图圆心的距离。labeldistancefloat,指定每一项的名称和距离圆心的距离。radiusfloat,饼图的圆心。explodearray,指定项距离圆心的距离。
import numpy as np
labs=['第一产业','第二产业','第三产业']#定义饼图标签
explode=[0.01,0.01,0.01]#设置各项离心0.01个半径
plt.figure(figsize=(8,4))
plt.pie(np.sum(data.iloc[0:4,[4,6,8]],axis=0),autopct='%1.1f%%',labels=labs,explode=explode)
plt.title('2011年产业结构')
#前四行为2011年四个季度的数据,第5,7,9列分别为三个产业的生产总值数据,将其取出后纵向做和就得到了2011年各产业的生产总值。
#autopct设置显示百分数在图上
六、直方图与条形图
1.直方图
用来展示特征的频数分布情况,便于分析数据分布情况。
函数:plt.hist()
常用参数:
x接收array,表示x轴数据。bins接收int或sequence,表示长方形条数。range接收tuple,筛选数据范围。densitybool,表示选择频率图还是频数图。默认为True,频率图。rwidth0-1,表示长方形的宽度。
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
mu=0
sigma=1
x=np.random.normal(mu,sigma,10000)
plt.hist(x,bins=20,density=True,rwidth=1)
plt.title('标准正态分布的频率直方图')
plt.show()
2.条形图
条形图主要用于展示分类数据,一个长方形代表一个分类类别,宽度没有数学意义。
函数:plt.bar()
常用参数:
xarray,x轴位置序列heightarray,x轴代表数据的数量(长方形的长度)width0-1,float,长方形的宽,默认为0.8color指定str或array,颜色。
data2020=np.sum(data.iloc[3:7,[4,6,8]])#取出2020年各产业四个季度的数据并做和得到一整年的数据。
data2020
>
第一产业增加值累计值(亿元) 162115.0
第二产业增加值累计值(亿元) 897336.9
第三产业增加值累计值(亿元) 1336661.8
dtype: float64
plt.bar(range(3),data2020.values)
#在条形图上添加数据信息
for i in range(len(data2020.values)):
plt.text(i,data2020.values[i],'{}亿元'.format(data2020.values[i]),va='bottom',ha='center')
plt.xticks(range(3),['第一产业','第二产业','第三产业'])
plt.title('2020年各产业国民生产总值条形图')
plt.show()
七、箱线图
可以看出数据是否具有对称性以及分布的离散程度等信息。
函数:plt.boxplot()
常用参数:
xarray,用于绘制箱线图的数据。notchbool,中间箱体是否有缺口。sym特定的str,指定异常点的形状。vertbool,图形是纵向还是横向。positionsarray,图形位置。widths每个箱体的宽度。labels指定每一个箱线图的标签。meanlinebool,是否显示均值线,默认为False。
plt.figure(figsize=(12,8))
plt.boxplot([data.iloc[:,4],data.iloc[:,6],data.iloc[:,8]],notch=True,meanline=True)
plt.xticks(range(1,4),['第一产业','第二产业','第三产业'])
plt.title('2011年以来各产业国民生产总值箱线图')
plt.show()
Original: https://blog.csdn.net/weixin_44020827/article/details/121624022
Author: Caspian�
Title: Python数据分析-绘图-1-Matplotlib绘图基础
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/765375/
转载文章受原作者版权保护。转载请注明原作者出处!