python --xarray绘图

简介: python --xarray绘图

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


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)

7286d6e68f7d43ac844c2e0480669700.png


基础绘图:.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");#设置直方图方向


f685c887a71d4f7f88be5d9e250f8306.png


参考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()


d93a6fa66b6e418f8cf75715f1ed8c3b.png


直接一步到位以填色图为例:

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


6fbd1513dcf64d5e9b46725d09944f2e.png

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

6aa7a136cfe54d9984a8b0a22d10b362.png


可以看见,一般默认x轴为经度,y轴为纬度。当然,也可以自己通过命令修改:

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



2b5c1296d5c54d448b12278302653ae5.png


当然,如果你不想要系统的colrbar,可以自己通过命令调整:

tropical.plot(cmap="bwr")


ba5734e1016c4c949eb4d60d54fdbcce.png


色标库colormap


当然,还有另一种方法也可以实现上述结果:imshow()运行速度而且较快

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



b386655de7ce404e98e090d413ba18b4.png


进阶绘图–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)


d57f0759501d4d27b6af9188822c0439.png


对于你想绘制什么样的图,都可以通过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 增加网格线。


相关文章
|
1月前
|
数据可视化 Python
Python 高级绘图:探索数据可视化
在Python中,利用matplotlib、seaborn等库可实现数据的可视化。matplotlib功能丰富,支持基础图表绘制;seaborn则提供了更美观的默认样式。此外,matplotlib还支持3D图形及动态图表的生成,满足多样化的数据展示需求。 示例代码展示了如何使用这些库绘制正弦波、散点图、3D曲面图及动态更新的折线图。通过numpy生成数据,并借助matplotlib与seaborn的强大绘图功能,实现数据的直观呈现。
70 17
|
1月前
|
数据可视化 Python
Python 高级绘图:从基础到进阶的可视化实践
本文介绍了使用 Python 的强大绘图库 matplotlib 实现多种图表绘制的方法,包括简单的折线图、多条折线图、柱状图、饼图、散点图及 3D 图的绘制。通过具体代码示例展示了如何设置轴标签、标题、图例等元素,并指出了 matplotlib 支持更多高级绘图功能。来源:https://www.wodianping.com/app/2024-10/47112.html。
77 0
|
2月前
|
数据可视化 数据挖掘 Linux
10幅必须掌握的Seaborn绘图
10幅必须掌握的Seaborn绘图
40 0
|
2月前
|
数据可视化 数据处理 Python
Matplotlib:Python绘图利器之王
Matplotlib:Python绘图利器之王
17 0
|
3月前
|
数据可视化 Python
Python 绘图编程:一场震撼视觉的奇幻之旅,带你闯入绚丽多彩的数据可视化世界!
【8月更文挑战第22天】Python 以强大功能和简洁语法闻名,其绘图能力尤其出色,助力数据可视化与创意展现。常用绘图库 Matplotlib 提供丰富指令,支持多样图表创作,如线图、柱状图及散点图等。通过简单代码即可完成数据展示,包括设置标题、轴标签等,实现直观的数据故事叙述,满足不同场景需求。不断实践探索,创造更佳视觉效果。
33 0
|
4月前
|
数据可视化 Linux 数据格式
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
|
4月前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
|
6月前
|
机器学习/深度学习 数据可视化 数据挖掘
Python绘图工具Matplotlib安装与使用,快速上手
Python绘图工具Matplotlib安装与使用,快速上手
|
6月前
|
数据采集 前端开发 C++
Python通过matplotlib动态绘图实现中美GDP历年对比趋势动图
随着中国的各种实力的提高,经常在各种媒体上看到中国与各个国家历年的各种指标数据的对比,为了更清楚的展示历年的发展趋势,有的还做成了动图,看到中国各种指标数据的近年的不断逆袭,心中的自豪感油然而生。今天通过Python来实现matplotlib的动态绘图,将中美两国近年的GDP做个对比,展示中国GPD对美国的追赶态势,相信不久的将来中国的GDP数据将稳超美国。
141 2
|
6月前
|
数据可视化 API Python
Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)
Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)
119 0