首先导入数据以及相关库:
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)
基础绘图:.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");#设置直方图方向
如果绘制二维图像,对于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()
直接一步到位以填色图为例:
#绘制填色图 ds.sst.sel(lat = slice(-20, 20), lon = slice(0, 360)).isel(time=7).plot.contourf()
#绘制等值线 ds.sst.sel(lat = slice(-20, 20), lon = slice(0, 360)).isel(time=7).plot.contour()
可以看见,一般默认x轴为经度,y轴为纬度。当然,也可以自己通过命令修改:
tropical.plot(y = "lon", x = "lat")
当然,如果你不想要系统的colrbar
,可以自己通过命令调整:
tropical.plot(cmap="bwr")
当然,还有另一种方法也可以实现上述结果:imshow()
运行速度而且较快
tropical.plot.imshow(cmap="GnBu")
进阶绘图–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)
对于你想绘制什么样的图,都可以通过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轴的标签,间隔等设置,有专门的设置方法,具体详见下面链接;
下面简单列几个最常用的:
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 增加网格线。