目录
使用介绍
plot()函数进阶使用
(1)全局信息代码
(2)绘图代码
(1)画布设置
(2)函数传入参数设置
(3)函数内部代码解读
(4)函数调用
(5)plt.tight_layout()函数的使用
(6)最后做出图形如下
在前文《Python直接使用plot()函数画图》提到了matplotlib库中最简单的一个函数plot()函数,介绍plot()最简单的使用方法,包括plot()函数中的参数,画布的基础设置,简单的数据代入画图,本次进阶使用,我们会将其中的参数通过函数方法进行画图的设置,同时也会讲解多个折线图的绘画以及对数据的选择。
使用函数画图有调用图形方便,参数设置简洁,代码复用性高等优点。
本次画图使用到的数据是2001年到2021年的作物产量变化数据。数据含有统计时间、粮食产量(万吨)、粮食产量增长(%)、棉花(万吨)、棉花增长(%)、油料(万吨)、油料增长(%)。
实验要求:画出粮食、油料折线走势图和粮食、油料增长率走势图
绘图要求:标签清晰,两在一个画布中呈现,设置图例,添加私人标签
# 导入所需模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
# 设置全局变量
warnings.filterwarnings("ignore")
plt.rcParams['font.sans-serif'] = ['Microsoft Yahei']
plt.rcParams['axes.unicode_minus'] = False
#数据读入
df = pd.read_excel(r'作物产量.xls')
①导入数据处理相关库(pandas、numpy)导入画图库(matplotlib)
②设置警告过滤器:警告过滤器【warnings.filterwarnings("ignore")】
用于控制警告消息的行为,如忽略,显示或转换为错误(引发异常)
其中参数ignore是忽略匹配的警告
③plt.rcParams设置参数
plt.rcParams['font.sans-serif']运行配置参数中的字体(font)为微软雅黑
plt.rcParams['axes.unicode_minus'] = False #运行配置参数总的轴(axes)正常显示正负号(minus)
# 将每一组数据画到同一个坐标子图中
f,(ax1,ax2) = plt.subplots(2,1,figsize=(6,6),dpi=100)
def draw_a(ax,df,x_col=0,y_cols=[1],colors=None,makers=None,title='',myname='',ylabel=''):
X = df.iloc[:,x_col] # Series
Y = df.iloc[:,y_cols]
title = "【"+myname+"】" + title
xlabel = "【"+myname+"】" + df.columns[x_col]
ylabel = "【"+myname+"】" + ylabel
for i in Y.columns:
ax.plot(X,Y[i],label=i)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_xticklabels(X,rotation=90,fontsize=8)
ax.set_yticklabels(ax.get_yticks(),fontsize=8)
ax.set_title(title)
ax.legend()
draw_a(ax1,df,x_col=0,y_cols=[1,5],title="2001-2021年粮食、油料产量走势折线图",myname='xxx',ylabel='产量') # 每次调用只在一个子图中绘图
draw_a(ax2,df,x_col=0,y_cols=[2,6],title="2001-2021年粮食、油料增长率走势折线图",myname='xxx',ylabel='增长率') # 每次调用只在一个子图中绘图
plt.tight_layout()
我们从上往下对本次实验的代码进行讲解。
f,(ax1,ax2) = plt.subplots(2,1,figsize=(6,6),dpi=100)
它是用来创建 总画布/figure“窗口”的,有figure就可以在上边(或其中一个子网格/subplot上)作图了,(fig:是figure的缩写)
前面的2,1是创造一个两行一列的子图,相当于有两个图,竖着放的两个图。
figsize=(6,6):画布大小6*6
dpi=100:画布的像素
此处我们要画两个图所以在画布设置的前面使用的是ax1,ax2,f是figure窗口的意思,ax1,ax2是数据参数。
draw_a是建立的函数名可根据自己选择定义,括号内为传入参数描述,可在引用的时候自己更改。
ax:传入画布参数
df:传入数据参数
x_col:x轴索引参数,也是数据筛选所需要用的参数,此处用来赛选X轴数据,由下图可知他的筛选是列索引的形式,不包含列名
y_cols:y轴索引参数,此处每个图都有两组数据,是两组数据的组合,因此在调用的时候是[1,5]形式。
colors、mark:是图形线条的颜色和形状
title:图文标题
myname:个人信息标签
ylabel:y轴标签名,因为x轴标签都一样因此只设置y轴标签
①筛选数据
筛选出X,Y轴的数据的数据
X = df.iloc[:,x_col] # Series
Y = df.iloc[:,y_cols]
②设置X轴、Y轴标签、标题
title = "【"+myname+"】" + title
xlabel = "【"+myname+"】" + df.columns[x_col]
ylabel = "【"+myname+"】" + ylabel
③循环将数据参数传入画布子图中
通过ax.plot函数传入数据,ax.set_设置部分,将要设置的参数传入函数,其中ax.set_xticklabels()函数是设置x、y轴刻度的样式,rotation是刻度值旋转度数,fontsize是刻度大小设置,ax.get_yticks()返回y刻度作为位置列表,ax.legend()是设置图例
for i in Y.columns:
ax.plot(X,Y[i],label=i)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_xticklabels(X,rotation=90,fontsize=8)
ax.set_yticklabels(ax.get_yticks(),fontsize=8)
ax.set_title(title)
ax.legend()
通过直接使用draw_a(参数数值):此处参数没有设置初始值的必须传入参数,设置初始值的参数可以不用参入也可以传入参数,这个是Python中自定义函数的使用以及参数变量的使用问题。
“tight_layout会自动调整子图参数,使之填充整个图像区域。这是个实验特性,可能在一些情况下不工作。它仅仅检查坐标轴标签、刻度标签以及标题的部分。 当你拥有多个子图时,你会经常看到不同轴域的标签叠在一起。
(码字不易点个关注不迷路)
(文章问题、个人问题私信)