标签: holoviews

更改复杂Holoviews图形的范围或轴限制

我看到了有关如何编辑单个对象(例如,全息视图中的“图像”或“直方图”)的范围(aka轴限制)的示例,例如,在堆叠交换直方图范围时的此答案。如果要将其应用于更复杂的对象(例如NdOverlay或HoloMap对象),该怎么办?本质上,我想对整个轴或图形应用限制,而不必担心我在所述轴或图形中可能包含的每个元素。

例如,假设我有以下内容,并且想要删除轴上被抑制的零:

df = pd.DataFrame({'A':[1,2,3,1,2,3],'B':[4,5,6,1,4,9],'C':['a','a','a','b','b','b']})
tbl = hv.Table(df)
fig = tbl.to.curve(kdims=['A'],vdims=['B'],mdims=['C']).overlay()
fig *= hv.Points([(3,4),(5,6),(1,3)])
fig
Run Code Online (Sandbox Code Playgroud)

复杂人物

将自定义绘图限制应用于此叠加层之类的多元素对象或HoloMap的最佳方法是什么?我不希望不必过滤数据,因为如果您要进行探索性工作,将多个数据源结合在一起,可能会很麻烦。我是否需要对每个组件应用一个程度上的关键字,还是有一种简单的方法可以将其广播到整个图形?

感谢您的协助。

python holoviews

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

如何在 Holoviews 中旋转元素

有没有办法在 Holoviews 中将绘图旋转 90°?

我有兴趣知道一般如何做到这一点,但我的直接目的是生成一个直方图,该直方图被旋转以将频率放在水平方向上,将关键值放在垂直方向上,以布局在散点旁边。

这可以用 .hist() 命令很好地完成,不幸的是,生成的对象 ( AdjointLayout) 不能嵌套在 a HoloMapor 中GridSpace,所以我只能使用自己的设备。

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

data1=np.random.randn(1000)
data2=np.random.rand(1000)

dataDict1={1:hv.Scatter(data1)+hv.Histogram(np.histogram(data1),kdims=['y']),
           2:hv.Scatter(data2)+hv.Histogram(np.histogram(data2),kdims=['y'])}

dataDict2={1:hv.Scatter(data1).hist(), 2:hv.Scatter(data2).hist()}

hv.HoloMap(dataDict1).collate()  #yay!
hv.HoloMap(dataDict2).collate()  #TypeError: HoloMap does not accept AdjointLayout type, data elements have to be a ('ViewableElement', 'NdMapping', 'Layout').
Run Code Online (Sandbox Code Playgroud)

我怀疑它是方括号中的%%optsor .opts()plot 选项之一,但我找不到记录的可用选项(链接要么已损坏,要么指向API 指南顶部,但我没有找到正确的部分API。)

python holoviews

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

Holoviews(散景)图的辅助轴

我试图绘制一组图形,上面覆盖着一个显示它们之间百分比差异的图。

我用于绘图的代码:

%%output size = 200
%%opts Curve[height=200, width=400,show_grid=True,tools=['hover','box_select'], xrotation=90]
%%opts Curve(line_width=1)


from bokeh.models import Range1d, LinearAxis

new_df = new_df.astype('float')
percent_diff_df = percent_diff_df.astype('float')

def twinx(plot, element):
    # Setting the second y axis range name and range
    start, end = (element.range(1))
    label = element.dimensions()[1].pprint_label
    plot.state.extra_y_ranges = {"foo": Range1d(start=0, end=150)}
    # Adding the second axis to the plot. 
    linaxis = LinearAxis(axis_label='% Difference', y_range_name='foo')
    plot.state.add_layout(linaxis, 'right')

wavelength = hv.Dimension('wavelength', label = 'Wavelength', unit = 'nm')
radiance = hv.Dimension('radiance', label = 'Radiance', unit = …
Run Code Online (Sandbox Code Playgroud)

plot axis python-3.x bokeh holoviews

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

在hvplot / holoviews / panel对象中更改窗口小部件类型的最佳方法是什么?

使用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小部件替换小部件的最佳方法是什么?

python holoviews pyviz

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

使用 holoviews / hvplot 更改图例位置

Hvplot 默认图例的位置在图的右侧。
如何更改此默认图例位置?

import numpy as np
import pandas as pd
import hvplot
import hvplot.pandas
import holoviews as hv

data = np.random.normal(size=[50, 2])
df = pd.DataFrame(data, columns=['a', 'b'])
df.hvplot.line()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

python holoviews hvplot holoviz

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

Python - 使用 Holoviews Bokeh 绘制大型数据集的特定子集

我想要做的是为大型时间序列创建一个带有平移和放大/缩小交互的交互式绘图。

考虑 Jupyter Notebook 中的下一个案例:

import numpy as np

import holoviews as hv
import holoviews.plotting.bokeh
from holoviews.operation import decimate

hv.extension('bokeh')

n_samples = 1_000 #100_000_000

x = np.linspace(0.0,10.0, n_samples)

y = np.zeros((64, n_samples))
r = np.random.rand(n_samples)

for i in range(64):
    y[i] = np.sin(r + np.random.rand(n_samples)*0.3)+i


curves = hv.Curve( (zip(x,y[0,:])) ).opts(height=400, width=800)
for i in range(1,64):
    curves *= hv.Curve( (zip(x,y[i,:])) ) 

curves = curves.options({'Curve': {'color': 'black'}})

curves = decimate(curves).collate()

curves.redim(x=hv.Dimension('x', range=(0, 2)))
Run Code Online (Sandbox Code Playgroud)

使用n_samples=1_000进展顺利,但当前的样本数量约为 10-1 亿点,因此速度非常慢。

我认为这是因为它创建了所有图形元素并将它们存储在内存中。然后,当我使用平移工具更改 x 中的范围时,它必须搜索需要绘制所有元素中的哪些元素,这就是缓慢的部分。

如果是这种情况,解决方案可能是考虑画布的范围,仅从数组中绘制 1k-5k …

python data-visualization large-data bokeh holoviews

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

如何在 Python 中使用 Bokeh 查看 Holoviews 的选项

一直在使用holoview来生成一些整洁的图。我想看看hv.Curve当我使用 opts 时我有什么选择。几乎没有文档。holoview帮助页面没有帮助。其中说“对于完整的文档以及可用的样式和绘图选项,请使用hv.help(hv.Curve).”。然而,它没有解释如何使用它。我试过将它作为代码的一部分运行。我试过在我的终端中运行命令。我已经尝试过print(),并与help(). 我只想知道我可以在这里放什么:overlay.opts(legend_position='right')除了legend_position?这是我试图让hv.help(hv.Curve)命令工作的代码。我知道这很可笑:

#!/usr/bin/env python3

import holoviews as hv
import numpy as np
import scipy.special
import pandas as pd
import bokeh
import pandas as pd
import numpy as np
import bokeh as bk
import plotly.graph_objects as go
import plotly.express as pex
import holoviews.plotting.bokeh
import numpy as np
import pandas as pd
from holoviews import *
from holoviews import Store …
Run Code Online (Sandbox Code Playgroud)

python python-3.x bokeh holoviews

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

如何在多个全息图中链接轴?

我用全息视图创建了数据着色器图:

datashade(hv.Points(df[
    [
        'PS Engine-% Load', 
        'PS Engine-Fuel Rate',
    ]
])) + datashade(hv.Points(df[
    [
        'SB Engine-% Load', 
        'SB Engine-Fuel Rate',
    ]
]))
Run Code Online (Sandbox Code Playgroud)

两个图都绘制得很好,现在我想链接轴的范围,所以当我放大一个图时,另一个图也以相同的方式放大。据我所知,当源值相同时,通常轴是链接的。在这种情况下,X 轴和 Y 轴的来源不同(注意 PS 和 SB 值),但范围相同。如何链接这些轴?

python plot holoviews datashader

4
推荐指数
1
解决办法
1295
查看次数

hvplot.heatmap with pandas dataframe:如何指定值维度?

我有一个简单的数据框,其中包含我想使用 hvpolot.heatmap 进行可视化的列和行。我可以做一些非常相似的事情:

df.style.background_gradient(cmap='summer')
Run Code Online (Sandbox Code Playgroud)

.. 在 Jupyter 中,看起来像: 在此处输入图片说明

数据框非常简单:

> df.index
Index(['ackerland', 'friedhof', 'gartenland', 'gehoelz', 'golfplatz',
       'gruenland', 'heide', 'kleingarten', 'laubholz', 'mischholz', 'moor',
       'nadelholz'],
      dtype='object')
> df.columns
Index(['hiking', 'biking', 'walking', 'sport', 'friends', 'family', 'picnic'], dtype='object')
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

>import hvplot.pandas
>df.hvplot.heatmap(colorbar=True)
ValueError: Dimensions must be defined as a tuple, string, dictionary or Dimension instance, found a NoneType type.```
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

>df.hvplot.heatmap(x=df.index, y=df.columns, colorbar=True)
ValueError: The truth value of a Index is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)

我已经阅读了大多数关于此的文档,但仍然不完全理解如何在 hvplot/holoviews/bokeh 中为 Pandas 数据框指定值维度: …

python pandas bokeh holoviews hvplot

4
推荐指数
1
解决办法
1596
查看次数

Holoviews 的对角线 (Python)

在 Holoviews 中,您可以使用 hv.HLine() 绘制水平线,使用 hv.VLine() 绘制垂直线,并将其添加到绘图中。
但是我怎样才能画一条对角线并将其添加到我的图中呢?

python holoviews holoviz

4
推荐指数
1
解决办法
843
查看次数