小编Dan*_*Dan的帖子

使用 xarray 在 netCDF 中输出 int32 时间维度

假设我的时间数据在 xarray 数据集中如下所示:

ds = xr.Dataset({'time': pd.date_range('2000-01-01', periods=10)})
ds.to_netcdf('asdf.nc')
Run Code Online (Sandbox Code Playgroud)

xarray 的to_netcdf()方法将时间维度输出为 int64:

$ ncdump -v time asdf.nc
netcdf asdf {
dimensions:
    time = 10 ;
variables:
    int64 time(time) ;
        time:units = "days since 2000-01-01 00:00:00" ;
        time:calendar = "proleptic_gregorian" ;
data:

 time = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
}
Run Code Online (Sandbox Code Playgroud)

因为我正在使用不支持 int64 的 THREDDS 服务器,所以我希望这些时间数据为 int32。使用 xarray 可以做到这一点吗?

netcdf python-xarray

5
推荐指数
1
解决办法
878
查看次数

HoloViews DynamicMap 悬停工具不会使用所选变量进行更新

我正在使用 Bokeh 后端学习 HoloViews,并使用 iPython/Jupyter 显示 pandas DataFrame 的所选列(实际上它是一个 xarray 数据集,但用 DataFrame 显示问题更简单)。问题是,当我选择第一个列/变量以外的任何列/变量时,悬停工具提示仍然显示第一个列/变量的值。我的代码大致基于HoloViews 仪表板文档

import holoviews as hv
import pandas as pd
import numpy as np
hv.extension('bokeh')

df = pd.DataFrame()
df['time'] = pd.date_range('2018-01-01', '2018-01-31')
df['var1'] = np.linspace(0, 1, len(df['time']))
df['var2'] = np.ones(df['var1'].shape)

def load_symbol(var):
    return hv.Curve(df, ('time', 'Time'), var)

variables = ['var1', 'var2']
dmap = hv.DynamicMap(load_symbol, kdims='Variable').redim.values(Variable=variables)

dmap.opts(framewise=True, tools=['hover'])
Run Code Online (Sandbox Code Playgroud)

使用悬停工具并选择第一个变量: 在此输入图像描述 使用悬停工具并选择第二个变量: 在此输入图像描述

请注意,为 var1 显示了正确的工具提示值 (0.200)。但是,当选择 var2 时,悬停工具仍显示 var1 的值,即使工具提示位于 var2 的正确位置。这里发生了什么?

python bokeh jupyter-notebook holoviews pyviz

5
推荐指数
1
解决办法
540
查看次数