xarray--一维空间绘图学习记录

简介: xarray--一维空间绘图学习记录

Simple Example



  • dataarrays 最简单的画图方法就是调用dataarray.plot()
  • xarray 可以通过使用坐标名称或者数据名称进行数据索引,如 attrs.long_name,attrs.standard_name, DataArray.name and attrs.units ,而这些名称可以通过dataarray.attrs命令获得,示例如下:


sst.attrs


{'long_name': 'Monthly Mean of Sea Surface Temperature',
 'unpacked_valid_range': array([-5., 40.], dtype=float32),
 'actual_range': array([-1.7999996, 35.56862  ], dtype=float32),
 'units': 'degC',
 'precision': 2,
 'var_desc': 'Sea Surface Temperature',
 'dataset': 'NOAA Optimum Interpolation (OI) SST V2',
 'level_desc': 'Surface',
 'statistic': 'Mean',
 'parent_stat': 'Weekly Mean',
 'standard_name': 'sea_surface_temperature',
 'cell_methods': 'time: mean (monthly from weekly values interpolated to daily)',
 'valid_range': array([-500, 4000], dtype=int16)}


调用dataarray.plot()方法进行快速绘图:


sst1 =sst.isel(lat=10, lon=10)
sst1.plot()


41e326163a7f465b8d836b81a58dfecb.png


除此之外,还可以绘制一些其他的绘图功能。例如,通过xarray.plot.line()命令调用matplotlib.pyplot.plot功能,分别传递索引和数组中的x,y值。例如,用蓝线绘制三角形matplotlib格式字符串可以使用:


sst1[:200].plot.line("b-^")

440b3ce38e6541d19a9bdbed6b52e447.png


注意!:不是所有的xarray 绘图都支持传递位置的参数,但是都支持关键字功能。关键字参数调用使用相同的方式,且更明确。如所示:


sst1[:200].plot.line(color="purple", marker="o")


fe70ed6543d34949be1a0923eb1d9b63.png


Adding to Existing Axis



添加绘图到一个现有的坐标轴,并作为一个关键字:ax。这对所有的xaray绘图方法都适用,在下面这个例子中axes是一个由plt.subplots数组组成的左轴和右轴。


fig, axes = plt.subplots(ncols=2)
axes
air1d.plot(ax=axes[0])
air1d.plot.hist(ax=axes[1])
plt.tight_layout()
plt.draw()

73431bff557c495dbc7676d4759660ba.png


右边是一个直方图由xarray.plot.hist ()绘制。


Controlling the figure size:控制图的大小



通过传递figsieze来控制图片的大小。为了方便起见,xarray的绘图方法还支持aspect和size控制生成图像的大小通过公式figsize =(aspect*size,size)


sst1.plot(aspect=2, size=3)
plt.tight_layout()


91424120d8fb48d6a27dfa3e2b9fa8f3.png


Determine x-axis values



每个默认维度坐标用于 x 轴(这里是时间坐标)。但是,您也可以沿 x 轴使用非维度坐标、多索引级别和没有坐标的维度。为了说明这一点,让我们从时间中计算一个“小数日”(epoch) ,并将其分配为一个非维度坐标:


每个默认维度坐标用于 x 轴(这里意思就是说将时间坐标作为x坐标轴)。但是,也可以沿 x 轴使用非维度坐标、多索引级别和没有坐标的维度。为了说明这一点,让我们从时间中计算一个“小数日”(epoch) ,并将其分配为一个非维度坐标:

decimal_day = (sst1.time - sst1.time[0]) / pd.Timedelta("1d")
sst1_multi = sst1.assign_coords(decimal_day=("time", decimal_day.data))
sst1_multi


2fc47bac7adb49d499a1b164fbd97579.png


使用 ‘decimal_day’ 作为 x 坐标,必须明确指定:


sst1_multi.plot(x="decimal_day")


f2ae20807cd74fceb99060423563b9a6.png


从“ time”和“ decimal _ day”创建一个名为“ date”的新 MultiIndex,也可以使用 MultiIndex 级别作为 x 轴:

sst1_multi = sst1_multi.set_index(date=("time", "decimal_day"))
sst1_multi.plot(x="decimal_day")


最后,如果数据集没有任何坐标,它将枚举所有数据点:


sst1_multi = sst1_multi.drop("date")
sst1_multi.plot()


2854a3aafb4744a59bfaccff48b60eff.png


同样的情况也适用于下面的二维图。


Multiple lines showing variation along a dimension :多条线显示一个维度上的变化



通过使用适当的参数调用 xary.plot.line () ,可以对二维数据绘制线图。考虑上面定义的三维变量。我们可以用直线图来检查经线上三个不同纬度地区的气温变化:

sst.isel(lon=10, lat=[19, 21, 22]).plot.line(x="time")


ee64834fcd3346758230c95efb96d952.png


它需要明确的指定:

  • 1 x:用于x轴的维度
  • 2 hue(色调):要用多条线表示的维度
    因此,我们可以通过指定 hue = lat而不是 x = ‘time来绘制前面的图。如果需要,可以使用add _ legend = False 关闭自动图例。或者,可以直接传递给 xary.plot.line (): sst.isel (lon = 10,lat = [19,21,22]).plot.line (hue ='lat')


eb98ebe46d11468988669e8ad0fe7a63.png


Dimension along y-axis :沿着y轴的维度



还可以绘制线图,使数据在 x 轴上,维度在 y 轴上。这可以通过指定适当的 y 关键字参数来实现。


sst.isel(time=10, lon=[10, 11]).plot(y="lat", hue="lon")



c2994a5d2e2e4775a6f09f32a5c03833.png


Step plots :步骤图



作为替代方案,也可以使用1维数据绘制类似 matplotlibplt.step


sst1[:20].plot.step(where="mid")


07f41c43d3a6422398571147ef3a4a24.png


参数 where 定义了步骤应该放在哪里,选项是“ pre”(默认值)、“ post”和“ mid”。当绘制与 Dataset.groupby _ bin ()分组的数据时,这尤其方便。


sst_grp = sst.mean(["time", "lon"]).groupby_bins("lat", [0, 23.5, 66.5, 90])
sst_mean = sst_grp.mean()
sst_std = sst_grp.std()
sst_mean.plot.step()
(sst_mean + sst_std).plot.step(ls=":")
(sst_mean - sst_std).plot.step(ls=":")
plt.ylim(-20, 30)
plt.title("Zonal mean temperature")


88551803d6c64d8e8890cc042fb3049c.png


Other axes kwargs :其他关键字



关键字 arguments xincreaseyincrease 可以控制轴的方向。


sst.isel(time=10, lon=[10, 11]).plot.line( y="lat", hue="lon", xincrease=False, yincrease=False)



72722d1eb6b744f6a923f06bae9d47a8.png


此外,可以使用 xscale、 yscale 来设置轴伸缩性; xticks、 yticks 来设置轴刻度,xlim、 ylim 来设置轴限制。它们接受与 matplotlib 方法 Axes.set _ (x,y) scale ()、 Axes.set _ (x,y) ticks ()、 Axes.set _ (x,y) lim ()相同的值。


原文参考链接:https://xarray.pydata.org/en/stable/user-guide/plotting.html#plotting-faceting


相关文章
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
32861 19
|
7月前
|
传感器 存储 程序员
一文彻底搞明白51单片机的发展历程
51单片机自1980年Intel推出MCS-51系列以来,历经40余年发展,从最初的工业控制逐步扩展到家电、通信、智能家居等多领域。其哈佛架构和丰富的指令集奠定了技术基础,并通过持续创新保持竞争力。面对ARM等新架构的挑战,51单片机通过工艺革新和功能扩展,如集成ADC、USB、蓝牙等,仍占据电动工具、智能传感器等成本敏感领域的70%以上市场份额。如今,它不仅是嵌入式技术的活化石,更是中国电子产业崛起的见证者,全球90%的51单片机产自长三角地区。坚持学习,每天一个小知识点,是不是有了新收获,加油哈!
584 0
|
IDE Java 编译器
使用Java分割PDF文件
使用Java分割PDF文件
285 1
|
11月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
3361 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
10月前
|
JSON JavaScript 前端开发
js跨域实现
【10月更文挑战第31天】在实际开发中,需要根据具体的需求和项目情况选择合适的跨域解决方案。
109 1
用人话讲懂strstr函数的理解和使用
用人话讲懂strstr函数的理解和使用
|
算法 搜索推荐 C++
【C++】sort()、stable_sort()和partial_sort()排序函数详解
【C++】sort()、stable_sort()和partial_sort()排序函数详解
571 0
|
机器学习/深度学习 资源调度 分布式计算
阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源
PAI-ChatLearn现已全面开源,助力用户快速、高效的Alignment训练体验。借助ChatLearn,用户可全身心投入于模型设计与效果优化,无需分心于底层技术细节。ChatLearn将承担起资源调度、数据传输、参数同步、分布式运行管理以及确保系统高效稳定运作的重任,为用户提供一站式解决方案。
|
算法 调度 云计算
操作系统中的调度算法:从理论到实践
在计算机科学领域,操作系统的调度算法是决定任务执行顺序的关键。本文首先概述了调度算法的基本概念和重要性,随后深入探讨了几种主要的调度算法,包括先来先服务、短作业优先、轮转与优先级调度等。通过引用最新的科研数据和实验证据,文章揭示了不同调度算法的性能表现和适用场景。此外,本文还讨论了现代操作系统中调度算法面临的挑战和未来的发展方向,强调了在多核处理器和云计算环境下调度策略的复杂性。最后,通过案例分析,展示了如何在实际系统中应用这些理论知识,以及在设计高效调度系统时需要考虑的因素。
|
机器学习/深度学习 算法 数据挖掘
机器学习——DBSCAN 聚类算法
【6月更文挑战第8天】DBSCAN是一种基于密度的无监督聚类算法,能处理不规则形状的簇和噪声数据,无需预设簇数量。其优点包括自动发现簇结构和对噪声的鲁棒性。示例代码展示了其基本用法。然而,DBSCAN对参数选择敏感,计算效率受大规模数据影响。为改善这些问题,研究方向包括参数自适应和并行化实现。DBSCAN在图像分析、数据分析等领域有广泛应用,通过持续改进,将在未来保持重要地位。
227 2