我有一个 Select 小部件,当另一个 Select 小部件更改时,它应该提供不同的选项列表,因此只要其他 Select 小部件发生更改,它就会更新。我如何在下面的示例代码中执行此操作?
_countries = {
'Africa': ['Ghana', 'Togo', 'South Africa'],
'Asia' : ['China', 'Thailand', 'Japan'],
'Europe': ['Austria', 'Bulgaria', 'Greece']
}
continent = pn.widgets.Select(
value='Asia',
options=['Africa', 'Asia', 'Europe']
)
country = pn.widgets.Select(
value=_countries[continent.value][0],
options=_countries[continent.value]
)
@pn.depends(continent.param.value)
def _update_countries(continent):
countries = _countries[continent]
country.options = countries
country.value = countries[0]
pn.Row(continent, country)
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个包含两个 Holoviews 对象的仪表板:一个包含 xarray 变量列表的面板对象,以及一个在输入上采用所选变量的 hvplot对象,如下所示:pn.widgets.Select
def hvmesh(var=None):
mesh = ds[var].hvplot.quadmesh(x='x', y='y', rasterize=True, crs=crs,
width=600, height=400, groupby=list(ds[var].dims[:-2]), cmap='jet')
return mesh
Run Code Online (Sandbox Code Playgroud)
当我从面板小部件中选择变量时,我希望更新地图:
我尝试将其作为动态地图来执行,如下所示:
from holoviews.streams import Params
import holoviews as hv
var_stream = Params(var_select, ['value'], rename={'value': 'var'})
mesh = hv.DynamicMap(hvmesh, streams=[var_stream])
Run Code Online (Sandbox Code Playgroud)
但是当我尝试显示地图时,我得到:
Exception: Nesting a DynamicMap inside a DynamicMap is not supported.
Run Code Online (Sandbox Code Playgroud)
从面板小部件中选择 hvplot 变量似乎是一种常见的需要。使用pyviz实现此目的的最佳方法是什么?
如果它有用,这是我的完整尝试 Jupyter Notebook。
我似乎无法弄清楚在参数化类中使用 FileInput 小部件的人触发函数的语法。
我知道 FileInput 本身不是一个参数,但我查看了它的代码,并且 value 属性是一个通用的 param.Parameter,所以我认为这会起作用。我也尝试过仅依赖于文件 ( @param.depends('file')
)。
class MyFile(param.Parameterized):
file = pn.widgets.FileInput() # should be a param.?
file_data = None
@param.depends('file.value')
def process_file(self):
print('processing file')
self.file_data = self.file.value
my_file = MyFile()
Run Code Online (Sandbox Code Playgroud)
然后,使用文件控件后,我希望my_file.file_data
有相同内容self.file.value
。
感谢任何输入,或者是否有人可以将我指向适当的文档。谢谢!
使用pyviz中的功能,可以很容易地为栅格化的xarray数据集生成一个hvplot
/ panel
交互式仪表板,例如下面的气温数据示例:
import xarray as xr
import hvplot.xarray
import panel as pn
airtemps = xr.tutorial.load_dataset('air_temperature')
atemp = airtemps.air[:10,:,:]
mesh = atemp.hvplot(groupby='time')
row = pn.Row(mesh)
display(row)
Run Code Online (Sandbox Code Playgroud)
它会自动为时间维度创建一个滑块:
如果我看一下创建的对象:
print(row)
Run Code Online (Sandbox Code Playgroud)
我可以看到DiscreteSlider
创建了一个小部件:
Row
[0] Row
[0] HoloViews(DynamicMap)
[1] WidgetBox
[0] DiscreteSlider(name='Time', options=OrderedDict([('2013-01-01 ...]), value=numpy.datetime64('2013-01-...)
Run Code Online (Sandbox Code Playgroud)
DiscreteSlider
用下拉菜单Select
小部件替换小部件的最佳方法是什么?
我正在使用 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 的正确位置。这里发生了什么?
我正在尝试将面板应用程序嵌入到 Flask 应用程序中。当小部件发生变化时,我正在努力让应用程序更新。为了重现该问题,我使用了Bokeh 中的海水温度示例,该示例包含在面板文档中。
使用 panel.show() 时,面板应用程序本身可以正常工作 - 当滑块小部件值更改时,绘图会更新。
仅 Bokeh 版本的应用程序(不使用面板,如示例中所示)在使用 Flask 时也能正常工作。
当我尝试将面板嵌入到 Flask 中时,滑块不再更新图表。
我怀疑我在modify_doc函数中遗漏了一些东西,以便正确处理请求。
这是代码
from flask import Flask, render_template
from bokeh.embed import server_document
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
import param
import panel as pn
from bokeh.server.server import Server
from tornado.ioloop import IOLoop
from bokeh.sampledata.sea_surface_temperature import sea_surface_temperature
class SeaSurface(param.Parameterized):
smoothing = param.Integer(0,bounds=(0, 30))
def __init__(self, **params):
super(SeaSurface, self).__init__(**params)
self.df = sea_surface_temperature.copy()
self.source = ColumnDataSource(data=self.df)
self.plot = figure(x_axis_type='datetime', y_range=(0, 25), y_axis_label='Temperature (Celsius)', …
Run Code Online (Sandbox Code Playgroud) 我查看了datashader/Networks和PyViz/network_packets(也使用 datashader)。我想在节点选择时获得对 python 代码的回调(在节点 id 上调用函数,即fun(node_id)
)。如何在 PyViz/datashader 中完成此操作?
这更多是一个关于 pyvis 图的问题,但也涉及一个运行 sqlite3 后端的 django 服务器。我的一个视图需要生成一个交互式 pyvis 图并将其显示在客户端浏览器中。我可以在没有 django 应用程序的情况下使用以下代码来完成此操作:
from pyvis.network import Network
network = Network()
network.show('map.html')
Run Code Online (Sandbox Code Playgroud)
正如您通过此方法所看到的,pyvis 首先创建一个 html 文件并将其保存到磁盘。nework.show() 只是在浏览器中打开文件。因为我将在 django web 应用程序上运行它,所以我宁愿创建图形的 html 而不将其保存到磁盘,然后将其作为视图的 HttpResponse 中的字符串返回。是否可以这样做,或者是否有其他更合适的方法?
我正在使用 xarray 数据集创建散点图
scat = ds.hvplot.scatter(x='a', y='b', groupby='c', height=900, width=900)
Run Code Online (Sandbox Code Playgroud)
如何向该图中添加回归线?
我也使用它来设置图中的一些属性,我可以在钩子函数中添加斜率,但我无法弄清楚如何从 plot.state 访问 x 和 y。这也可能是完全错误的做法。
scat = scat.opts(hooks=[hook])
def hook(plot, element):
print('plot.state: ', plot.state)
print('plot.handles: ', sorted(plot.handles.keys()))
par = np.polyfit(x, y, 1, full=True)
gradient=par[0][0]
y_intercept=par[0][1]
slope = Slope(gradient=gradient, y_intercept=y_intercept,
line_color='orange', line_dash='dashed', line_width=3.5)
plot.state.add_layout(slope)
scat = scat.opts(hooks=[hook])
Run Code Online (Sandbox Code Playgroud) 我正在使用 Parameterized Class 构建带有 Panel Holoviz 的仪表板。
在本课程中,我想要一个按钮,当按下该按钮时开始训练模型,当模型完成训练时,它需要显示基于该模型的图表。
如何使用类在面板中构建此类依赖关系?
pyviz ×10
python ×9
holoviews ×5
panel-pyviz ×3
bokeh ×2
holoviz ×2
callback ×1
datashader ×1
django ×1
flask ×1
graph ×1
parameters ×1
python-3.x ×1