Python气象绘图教程(五)

2020-06-09 15:31:14 浏览数 (1)

本节提要:折线图进阶、散点图

一、复习回顾

三、四两章已经将折线图的基础参数讲解完了,前面几章内容主要的是:

1、figure中的figsize(控制画布大小)、dpi(图像解析度),在figure上添加子图

2、折线图plot中的lw(线宽)、ls(线条样式)、alpha(透明度)、marker(标记样式)。开启网格线命令grid,使用字典的方式调节标题、坐标名大小颜色fontdict、在图形上添加图例 legend。

3、在一张子图中共用某条坐标轴、在两张子图中共用某条坐标轴。

二、折线图进阶

现在以一张虚构数据的墒情图来细讲折线图较少见的参数。

首先能看出的是折线图的背景色发生了变化,如何调节背景色:

代码语言:javascript复制
ax1=fig.add_subplot(111,facecolor='papayawhip')

在引入子图时,在subplot命令中添加facecolor一句,引号中是调节颜色名,比如修改为green:

代码语言:javascript复制
ax1=fig.add_subplot(111,facecolor='green')

(吐了)在画图时,一定要考虑到配色方案给人的视觉感受。

在共享x轴时,两边y轴的零刻度是不一致的,这要结合你分析的数据及时改变,其命令如下:

代码语言:javascript复制
ax1.set_ylim(-1,5.5)
ax2.set_ylim(5,30)

xlim和ylim是用来设置坐标轴的范围的。在分析的这三十天气温时,因为没有任何一天低于10摄氏度,那为什么不将右边刻度从10开始设置呢?不信可修改来具体分析:

咋一看似乎还行,但是在气温折线刚开始的时候有一部分是比较低的,绘制图像的人当然知道气温其实都在10摄氏度以上,不过当别人读取图像时,第一感觉会参照左边的刻度,这样会使阅读者产生前几天气温比较低(在零下)的感觉,所以制图时应该兼顾多方面,以给阅读者最良好的体验(包括前面提到的配色问题)。

和上个教程的体系相比,y轴上在主刻度的基础上出现了副刻度。在引入库包阶段输入:

代码语言:javascript复制
import matplotlib.ticker as ticker

引入这个工具,在设定刻度阶段输入:

代码语言:javascript复制
ax1.yaxis.set_minor_locator(ticker.MultipleLocator(0.1))

minor即是次要的意思。此处设定副刻度为0.1单位,还可以修改为0.001个单位。

左侧y轴副刻度0.1单位

左侧y轴副刻度0.01单位

看起来好像副刻度消失了,其实是因为过于密集导致生成了黑线。

同样的,主刻度也能修改,将minor换为major即可:

代码语言:javascript复制
ax2.yaxis.set_major_locator(ticker.MultipleLocator(10))

现在将右侧主刻度设置为每10个单位显示:

在上面这幅图中,图例legend中的蒸发图例好像多出来一行,没有对齐(强迫症不爽),可通过参数ncol进行修改,ncol表示图例的列数:

代码语言:javascript复制
plt.legend((bar1,bar2,line1,line2),('降水','蒸发','墒情','气温'),loc=2,frameon=False,framealpha=0.5,ncol=1)
plt.legend((bar1,bar2,line1,line2),('降水','蒸发','墒情','气温'),loc=2,frameon=False,framealpha=0.5,ncol=4)

第一张图ncol=1,表示图例只有一列;第二张图ncol=4,表示图例有四列。

三、散点图基础

散点图也是经常使用的一类图表,其主体结构语句为:

代码语言:javascript复制
plt.scatter(x,y,s,color='',cmap='',marker='',alpha='')

其中,(x,y)是其在坐标中的位置,s表示打点的大小,color表示打点的颜色,cmap表示颜色映射表,marker表示打点的标记,alpha修改透明度,整体上来说和折线图的用法类似。

以一个例子简要展示:

代码语言:javascript复制
######引入库包############
import matplotlib.pyplot as plt
import numpy as np
#######拟造数据#############
x=np.linspace(0.05,10,1000)
y=np.random.rand(1000)
#######画布与绘图区#####
fig=plt.figure(figsize=(3,3),dpi=200)
ax=fig.add_subplot(111)
ax.scatter(x,y,s=10,)
plt.show()

下面是修改某些参数:

当然,散点图除了绘制回归曲线,还能有更多的用途,比如在地图上标记地点:

代码语言:javascript复制
nameandstation={"恩施":[109.5,30.2],"利川":[109,30.3],"巴东":[110.34,31.04],"建始":[109.72,30.6],"宣恩":[109.49,29.987],"来凤":[109.407,29.493],"咸丰":[109.14,29.665],"鹤峰":[110.034,29.89]}
for key,value in nameandstation.items():
    ax.scatter(value[0] , value[1] , marker='.' , s=60 , color = "k" , zorder = 3)
    ax.text(value[0]-0.07 , value[1] 0.03 , key , fontsize = 7 , color = "k")

还可以绘制更加酷炫然而没多大用处的图:

0 人点赞