前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python气象绘图教程(五)

Python气象绘图教程(五)

作者头像
气象学家
发布2020-06-09 15:31:14
2.3K0
发布2020-06-09 15:31:14
举报
文章被收录于专栏:气象学家气象学家

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

一、复习回顾

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气象学家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档