目录

使用介绍

plot()函数进阶使用

(1)全局信息代码

(2)绘图代码

(1)画布设置

(2)函数传入参数设置

(3)函数内部代码解读

(4)函数调用

(5)plt.tight_layout()函数的使用

(6)最后做出图形如下


使用介绍

在前文《Python直接使用plot()函数画图》提到了matplotlib库中最简单的一个函数plot()函数,介绍plot()最简单的使用方法,包括plot()函数中的参数,画布的基础设置,简单的数据代入画图,本次进阶使用,我们会将其中的参数通过函数方法进行画图的设置,同时也会讲解多个折线图的绘画以及对数据的选择。

使用函数画图有调用图形方便,参数设置简洁,代码复用性高等优点。

本次画图使用到的数据是2001年到2021年的作物产量变化数据。数据含有统计时间、粮食产量(万吨)、粮食产量增长(%)、棉花(万吨)、棉花增长(%)、油料(万吨)、油料增长(%)。

plot()函数进阶使用

实验要求:画出粮食、油料折线走势图和粮食、油料增长率走势图

绘图要求:标签清晰,两在一个画布中呈现,设置图例,添加私人标签

(1)全局信息代码

# 导入所需模块
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)

(2)绘图代码

# 将每一组数据画到同一个坐标子图中

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

我们从上往下对本次实验的代码进行讲解。

(1)画布设置

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是数据参数。

(2)函数传入参数设置

draw_a是建立的函数名可根据自己选择定义,括号内为传入参数描述,可在引用的时候自己更改。

ax:传入画布参数

df:传入数据参数

x_col:x轴索引参数,也是数据筛选所需要用的参数,此处用来赛选X轴数据,由下图可知他的筛选是列索引的形式,不包含列名

y_cols:y轴索引参数,此处每个图都有两组数据,是两组数据的组合,因此在调用的时候是[1,5]形式。

 colors、mark:是图形线条的颜色和形状

title:图文标题

myname:个人信息标签

ylabel:y轴标签名,因为x轴标签都一样因此只设置y轴标签

(3)函数内部代码解读

①筛选数据

筛选出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()

(4)函数调用

通过直接使用draw_a(参数数值):此处参数没有设置初始值的必须传入参数,设置初始值的参数可以不用参入也可以传入参数,这个是Python中自定义函数的使用以及参数变量的使用问题。

(5)plt.tight_layout()函数的使用

tight_layout会自动调整子图参数,使之填充整个图像区域。这是个实验特性,可能在一些情况下不工作。它仅仅检查坐标轴标签、刻度标签以及标题的部分。 当你拥有多个子图时,你会经常看到不同轴域的标签叠在一起。

(6)最后做出图形如下

(码字不易点个关注不迷路)

(文章问题、个人问题私信)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐