python --xarray绘图

文章目录

    • 基础绘图:.plot()
    • 进阶绘图--axes

首先导入数据以及相关库:

import xarray as xr
import numpy as np
file='D:\\sst.mnmean.nc'
data=xr.open_dataset(file)

由于该数据纬度坐标lat是自大至小排列的(即降序排列,为便于后续处理)使用.sortby()对纬度坐标lat进行升序排列。第一个参数是需进行排序的变量名称(字符串类型);第二个参数ascending是排序方式,若为True则按照升序,否则按照降序。

ds = data.sortby("lat", ascending= True)

python --xarray绘图_第1张图片

基础绘图:.plot()

DataArray 对象plot()方法能够实现快速绘图。

一般来说,我们使用xr.open_dataset命令读取的nc文件都是dataset存储格式,因此需要提取里面的绘图数据,转为dataArray格式,再进行绘图。

默认情况下,.plot()方法具体操作就方法传入 dataArray 的维度大小而定。

  • 一维数组:使用 plt.plot() 绘制的线图;
  • 二维数组:使用 plt.pcolormesh() 绘制的 pcolormesh 图;或者.plot.contourf()绘制的填色图;或者.plot.imshow()
  • 二维以上数组:视情况决定

举个例子,我这里读取sst数据进行绘图,发现绘制出的是直方图:

 ds.sst.plot()
 #ds.sst.plot(orientation = "horizontal");#设置直方图方向

python --xarray绘图_第2张图片
参考matplotlib官方绘图示例调整相关参数

如果绘制二维图像,对于SST来说,就是选取一个时间,看下面绘制热带海区sst的例子:

tropical = ds.sst.sel(lat = slice(-20, 20), lon = slice(0, 360)).isel(time=7)
tropical.plot()
 # 等价于ds.sst.sel(lat = slice(-20, 20), lon = slice(0, 360)).isel(time=7).plot()

python --xarray绘图_第3张图片
直接一步到位以填色图为例:

#绘制填色图
ds.sst.sel(lat = slice(-20, 20), lon = slice(0, 360)).isel(time=7).plot.contourf()

python --xarray绘图_第4张图片还有这样,

#绘制等值线
ds.sst.sel(lat = slice(-20, 20), lon = slice(0, 360)).isel(time=7).plot.contour()

python --xarray绘图_第5张图片
可以看见,一般默认x轴为经度,y轴为纬度。当然,也可以自己通过命令修改:

tropical.plot(y = "lon", x = "lat")

python --xarray绘图_第6张图片
当然,如果你不想要系统的colrbar,可以自己通过命令调整:

tropical.plot(cmap="bwr")

python --xarray绘图_第7张图片
色标库colormap
当然,还有另一种方法也可以实现上述结果:imshow()运行速度而且较快

tropical.plot.imshow(cmap="GnBu")

python --xarray绘图_第8张图片

进阶绘图–axes

上述简单介绍了一些基本绘图的方式,一般绘制单张图。下面,讲一下如何绘制多张图片,并对各个子图进行具体设置。
首先,准备画图的库,以及相关的数据。

import matplotlib.pyplot as plt
data

大致分为以下三步:

  • 第一步,准备画板;
  • 第二步,指向axes,类似于画板上的一张纸
  • 第三步,在这张纸上进行绘制图像以及其他操作。
fig = plt.figure(figsize=(20,12))#准备画板并设置画板大小
ax=fig.add_subplot(111)#指向一个子图

如果你想创建多张图,就可以这样:

ax1=fig.add_subplot(211)#表示两行一列,第一个位置
ax2=fig.add_subplot(212)#表示两行一列,第二个位置
#以此类推你需要的子图数量以及位置

简单示意一下:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

python --xarray绘图_第9张图片
对于你想绘制什么样的图,都可以通过ax.xxx(),进行绘制。我将常用的图形整理如下:

Axes.plot()	折线图 #在()设置数据,下列同理
Axes.scatter	散点图
Axes.step	阶梯图。
Axes.fill_between	填充两条水平曲线之间的区域。
Axes.fill_betweenx	填充两条垂直曲线之间的区域。
Axes.bar	条形图。
Axes.barh	水平条形图。
Axes.pie	饼图。
Axes.vlines	在每个x上绘制从ymin到ymax的垂直线。
Axes.hlines	在从xmin到xmax的每个y上绘制水平线。
Axes.specgram	绘制频谱图。
Axes.contour	绘制等值线。
Axes.contourf	绘制填充图
Axes.imshow	将数据显示为图像,即在2D常规栅格上。
Axes.matshow	将2D矩阵或数组的值绘制为颜色编码的图像。
Axes.pcolor	创建具有非规则矩形网格的伪彩色图。
Axes.pcolorfast	创建具有非规则矩形网格的伪彩色图。
Axes.pcolormesh	创建具有非规则矩形网格的伪彩色图。
Axes.spy	绘制2D阵列的稀疏模式。

上述方法是进行图片绘制,对于添加标签、标题、x\y轴的标签,间隔等设置,有专门的设置方法,具体详见下面链接;

matplotlib.axes属性设置

下面简单列几个最常用的:

Axes.set_xlim	设置x轴范围
Axes.set_ylim	设置y轴范围
Axes.set_xlabel	设置x轴的标签。
Axes.set_ylabel	设置y轴的标签。
Axes.set_title	设置标题。
Axes.legend	放置一个图例。
Axes.set_xticks	设置xaxis的刻度。
Axes.set_xticklabels	使用字符串标签列表设置xaxis的标签。
Axes.grid	增加网格线。

你可能感兴趣的:(笔记,python,库学习,python,绘图,python,xarray,matplotlib)