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

Posted oceanography-Rookie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

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

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

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

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

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

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

Controlling the figure size:控制图的大小

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

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

plt.tight_layout()

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

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

sst1_multi.plot(x="decimal_day")


从“ 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()


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

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

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

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


它需要明确的指定:

  • 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')

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

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

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

Step plots :步骤图

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

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


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

Other axes kwargs :其他关键字

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

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


此外,可以使用 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

以上是关于xarray--一维空间绘图学习记录的主要内容,如果未能解决你的问题,请参考以下文章

使用网格数据和一维纹理图在 opengl 中创建等高线图

数据可视化应用xarray 绘图可视化-二进制GrADS气象数据处理(附代码)

使用没有日期的时间作为 xarray 中的一维

Python--matplotlib 绘图可视化练手--折线图/条形图

数据可视化应用xarray 绘图可视化-基础绘图(附代码)

数据可视化应用xarray 绘图可视化-分面绘图(附代码)