繁体   English   中英

如何将 Xarray plot xr.ufuncs.log(data_slice).plot(cmap='magma', vmin=0, vmax = max_value*.7) 转换为 matplotlib Z32AA49E1B78A942A

[英]How do I convert the Xarray plot xr.ufuncs.log(data_slice).plot(cmap='magma', vmin=0, vmax = max_value*.7) into the matplotlib plot?

所以基本上我有一个 Xarray 和一个 NumPy 数组代表频谱图的相同数据。 以下代码用于plot Xarray,清晰度非常好(它将频谱图切割到最大值以上)

plt.figure(figsize=(3,5))
data_slice = data['__xarray_dataarray_variable__'].sel(slices=41625.0)
max_value = np.log(data.sel(slices=slice(67.5, 5.999625e+05)).max(xr.ALL_DIMS)['__xarray_dataarray_variable__'].values)
xr.ufuncs.log(data_slice).plot(cmap='magma', vmin=0, vmax = max_value*.7)

这里我们有 Xarray -> 数据和我们 select 它的一个特定部分,然后 plot 它使用 xf.plot 它。 同样,我有一个 Numpy 数组,其形状为 (256, 12333),其中 12333 代表时间戳的数量,256 代表频率区间。 如何告诉我的 plot 鞋数据,直到我需要 plot 的东西的最大值? 我想这样做,以便获得频谱图的放大图像,以便我可以清楚地看到声音。 截至目前,我一直在绘制我的 numpy 数组,如下所示 -

plt.imshow(data[:, 30:100])

为什么不直接将其转换为 DataArray?

然后,您将利用 xarray 的绘图实用程序。

特别是,您将能够使用robust=True kwarg,它将自动从动态颜色范围中删除潜在的异常值。

还有自动标签,使用"long_name"属性。

freq_count, time_count = 256, 12333

data = np.random.randn(freq_count, time_count)

da = xr.DataArray(
    dims=("frequency", "time"),
    data=data,
    coords=dict( 
        frequency=np.arange(freq_count), 
        time=np.arange(time_count), 
    ), 
    attrs=dict(long_name="Spectral intensity over time") 
)

绘图:

fig, axes = plt.subplots(ncols=2)
da.plot.imshow(robust=False, ax=axes[0])
da.plot.imshow(robust=True, ax=axes[1])
plt.show()

robust=False plot 和robust=True plot 之间的比较:

稳健=假图和稳健=真图之间的比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM