Python数据分析-绘图-1-Matplotlib绘图基础

注:编码中用到的国民生产总值的数据可以在国家数据网站获得。

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的图像')

Python数据分析-绘图-1-Matplotlib绘图基础
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()

Python数据分析-绘图-1-Matplotlib绘图基础

四、折线图

一般用于展示某一特征随时间变化趋势。

函数: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()

Python数据分析-绘图-1-Matplotlib绘图基础

五、饼图

用于表现不同类别的占比情况。

函数: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设置显示百分数在图上

Python数据分析-绘图-1-Matplotlib绘图基础

六、直方图与条形图

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

Python数据分析-绘图-1-Matplotlib绘图基础

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

Python数据分析-绘图-1-Matplotlib绘图基础

七、箱线图

可以看出数据是否具有对称性以及分布的离散程度等信息。

Python数据分析-绘图-1-Matplotlib绘图基础

函数: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()

Python数据分析-绘图-1-Matplotlib绘图基础

Original: https://blog.csdn.net/weixin_44020827/article/details/121624022
Author: Caspian�
Title: Python数据分析-绘图-1-Matplotlib绘图基础

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/765375/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球