Python气象绘图教程(四)

2020-06-09 15:30:52 浏览数 (2)

本节提要:回顾复习,新的调整命令。

一、回顾复习

  1. 前面讲到Python库包的下载与安装,推荐使用conda命令进行安装,通过conda list查看当前已经安装好的库包及版本。
  2. 画图步骤:①import ###引入库包### ②fig=plt.figure() ###准备画布### ③读取数据 ④ax=fig.add_subplot() ###添加作图区### ⑤绘制图形 ⑥plt.show() ###展示图形###
  3. 画布figure及其参数、绘图区axes、多子图的绘制命令(subplots)。
  4. 常用的折线图plot的基础参数(linestyle、linewidth、color、alpha、marker)
  5. 一个解决因为单位不一致导致出图畸形的小命令twin。

二、新的内容

今天主要讲解坐标轴网格线和标题、图例、合并两幅子图的横坐标并取消空白:

A、坐标轴在不设置时,会自动根据数据的大小进行最合适的展示(当然只是电脑认为最合适的),但没有坐标轴的名字,大多数时候需要定制坐标轴。

定制坐标轴名,通过xlabel('你需要设置的内容')或者ylabel('你需要设置的内容')进行设置;定制标题,可以通过title('你需要添加的标题')。下面这个小程序讲解:

代码语言:javascript复制
fig=plt.figure(figsize=(2,2))
fig,ax=plt.subplots(dpi=200)
ax.plot(x,tem,c='k',lw=1,ls='-',marker='d')

这是一张素图,没有任何设置,是电脑判定的最佳展示,现在通过下面语句定制化出图:

代码语言:javascript复制
ax.set_title('实验气温图')
ax.set_xlabel('时间')
ax.set_ylabel('气温 ℃')

这样就进行了一番简单的定制化。现在看来似乎x,y轴名称字号偏小,可以通过字典参数方式进行调节:

代码语言:javascript复制
font={'size':20,'color':'red'}
ax.set_xlabel('时间',fontdict=font)
ax.set_ylabel('气温 ℃',fontdict=font)

在字典中存储需要修改的的参数名称和指定值大小,在这个图中,我将字号(size)修改为20,将颜色(color)修改为红色。当然,字典里还可以存放更多的参数,这里只修改了两种,剩下读者可自行探索。

另外,matplotlib中还可以显示网格线,命令为ax.grid()

grid()中还可以进行设置,比如开启虚线ax.grid(ls='--')

还可以指定是否开启x,y轴网格线ax.grid(True,axis='y')

ax.grid(True,axis='x')

B、在昨天绘制的观测图中,出现了三种样式,为了区分识别他们,在图中添加了图例:

代码语言:javascript复制
plt.legend((line1,bar1,line2),('气温','降水量','气压'),loc='center left')

添加图例的命令是legend(),前面是图上的线条和柱形图的名称,后面是你指定的显示出来的名称,注意应当一一对应。

C、昨天讲解了如何在同一子图中合并横坐标轴,那用到了twin命令。今天将了解如何合并两幅子图的坐标轴,这幅图展示了去年月平均气温和累年月平均气温距平变化。

代码语言:javascript复制
fig,((ax1),(ax2))=plt.subplots(2,1,figsize=(5,5),dpi=200,sharex='all')
fig.subplots_adjust(hspace=0)
line1,=ax1.plot(x,tem,color='k',lw=1.5,ls='--')
bar1=ax2.bar(x,Anomaly,color=np.where(Anomaly>0,'red','b'))
ax1.set_ylabel('月平均气温 ℃')
ax2.set_ylabel('气温距平 ℃')
ax2.set_xlabel('月份')
ax2.set_xticks(x)
plt.show()

注意第一排中的sharex='all'命令,这是令两幅子图共享x轴。而第二排中的命令,指令两个之间的空白等于0。

改动前(素图):

定制化图表后:

在绘制气温距平的柱状图时,如何使正负柱体的颜色不一致呢。numpy中提供了一个np.where(判定语句,符合判定语句返回值,不符合判定语句返回值)命令,如何理解这个命令,通过一个测试演示:

在本程序中,指令判断距平是否大于零,大于零返回“red”,否则返回“blue”。

0 人点赞