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 标题
xlabel x轴名称
ylabel y轴名称
xlim x轴范围
ylim y轴范围
xticks x轴刻度的数目和取值
yticks y轴刻度的数目和取值
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.5
lines.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 添加网格,bool
axes.titlesize 标题大小,"small","medium","large",默认为”large"
axes.labelsize 轴标大小,默认为“medium"
axes.labelcolor 轴标颜色,默认为”k“
axes.spines.{left,right,top,bottom} 添加坐标轴,bool,默认为True
axes.{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表示每个点的颜色。
marker str,点的形状。
alpha 0-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绘图基础_第1张图片

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绘图基础_第2张图片

四、折线图

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

 函数:plt.plot()

常用参数:

x,y
color 线条颜色
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绘图基础_第3张图片

 五、饼图

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

函数:plt.pie()

常用参数:

x array
label array,每一项的名称。
color 颜色
autopct 指定数值的显示方式。
pctdistance float,指定每一项的比例和距离饼图圆心的距离。
labeldistance float,指定每一项的名称和距离圆心的距离。
radius float,饼图的圆心。
explode array,指定项距离圆心的距离。
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绘图基础_第4张图片

 六、直方图与条形图

1.直方图

用来展示特征的频数分布情况,便于分析数据分布情况。

函数:plt.hist()

常用参数:

x 接收array,表示x轴数据。
bins 接收int或sequence,表示长方形条数。
range 接收tuple,筛选数据范围。
density bool,表示选择频率图还是频数图。默认为True,频率图。
rwidth 0-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绘图基础_第5张图片

 2.条形图

条形图主要用于展示分类数据,一个长方形代表一个分类类别,宽度没有数学意义。

函数:plt.bar()

常用参数:

x array,x轴位置序列
height array,x轴代表数据的数量(长方形的长度)
width 0-1,float,长方形的宽,默认为0.8
color 指定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绘图基础_第6张图片

七、箱线图 

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

Python数据分析-绘图-1-Matplotlib绘图基础_第7张图片

 函数:plt.boxplot()

常用参数:

x array,用于绘制箱线图的数据。
notch bool,中间箱体是否有缺口。
sym 特定的str,指定异常点的形状。
vert bool,图形是纵向还是横向。
positions array,图形位置。
widths 每个箱体的宽度。
labels 指定每一个箱线图的标签。
meanline bool,是否显示均值线,默认为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绘图基础_第8张图片

 

你可能感兴趣的:(数据分析,python,matplotlib)