标签: holoviews

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
查看次数

Holoviews 按分类数据散点图颜色

我一直在尝试了解如何完成绘制两个数据集(每个数据集具有不同颜色)这一非常简单的任务,但我在网上发现的任何内容似乎都无法做到这一点。这是一些示例代码:

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

ds1x = np.random.randn(1000)
ds1y = np.random.randn(1000)
ds2x = np.random.randn(1000) * 1.5
ds2y = np.random.randn(1000) + 1

ds1 = pd.DataFrame({'dsx' : ds1x, 'dsy' : ds1y})
ds2 = pd.DataFrame({'dsx' : ds2x, 'dsy' : ds2y})
ds1['source'] = ['ds1'] * len(ds1.index)
ds2['source'] = ['ds2'] * len(ds2.index)

ds = pd.concat([ds1, ds2])
Run Code Online (Sandbox Code Playgroud)

目标是在单个框架中生成两个数据集,并用一个分类列来跟踪源。然后我尝试绘制散点图。

scatter = hv.Scatter(ds, 'dsx', 'dsy')
scatter
Run Code Online (Sandbox Code Playgroud)

这按预期工作。但我似乎无法理解如何根据source列对两个数据集进行不同的着色。我尝试了以下方法:

scatter = hv.Scatter(ds, 'dsx', 'dsy', color='source') …

python holoviews hvplot

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

设置 hvplots 的默认选项

我想为 hvplots 生成的图设置默认选项。

通常在全息视图中我会这样做来为每个图设置默认值:

import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
opts.defaults(opts.Curve( height=400, width=900 ,show_grid=True))
Run Code Online (Sandbox Code Playgroud)

现在我正在使用 hvplots,导入已成为基于 xarray 的绘图的以下内容

import xarray as xr
import hvplot.xarray
Run Code Online (Sandbox Code Playgroud)

如果我有一个 xarray 数据集并且我想绘制其中一个维度,那么我使用这个

ds.myDims.hvplot()
Run Code Online (Sandbox Code Playgroud)

然而,这给出了一个具有默认宽度且没有网格线的图。要添加它,我需要指定绘图的选项。

ds.myDims.hvplot(height=400, width=900,grid=True)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想全局设置高度、宽度、网格等,就像在全息视图中一样,所以我不必为每个绘图指定它。

python holoviews hvplot

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

使用 Streamz 从 pandas DataFrame 进行流式传输

和包一起工作streamzhvplot为使用 pandas 数据帧绘制流数据提供支持。

例如,该streamz包有一个用于创建随机流数据帧的便利实用程序:

import hvplot.streamz
from streamz.dataframe import Random

sdf = Random(interval='200ms', freq='50ms')
sdf
# Stop the streaming with: sdf.stop()
Run Code Online (Sandbox Code Playgroud)

可以使用以下命令在流图表中简单地绘制此图hvplot

sdf.hvplot()
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以从预先存在的pandas数据帧中传输数据?

例如,我希望能够这样说:

import pandas as pd

df=pd.DataFrame({'a':range(0,100),'b':range(5,105)})

sdf = StreamingDataFrame(df, interval='200ms', freq='50ms')

Run Code Online (Sandbox Code Playgroud)

然后,我可以简单地使用预先存在的pandas数据帧中的示例数据,而不是使用随机示例数据。

pandas holoviews hvplot holoviz

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

使用 Holoviews 或 Hvplot 时将框缩放(或平移或滚轮缩放)设置为默认值

我的 hvplot 有默认的平移和滚轮缩放作为缩放和移动图形的方式。
但我希望框缩放成为我的图表中的默认值。
如何在 hvplot 或 Holoviews 中执行此操作?

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

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

hvplot pan 是默认的活动工具

python holoviews hvplot holoviz

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

如何在 HoloViews 中获取小部件“处理程序”

当使用基于 xArray 数据的 HoloViews 创建绘图 (QuadMesh) 时,任何缺失的维度都会自动创建滑块等小部件以方便数据探索。例如:

hv_ds = hv.Dataset(data)    
plot = hv_ds.to(hv.QuadMesh, kdims=["lon", "lat"], vdims="depth")
Run Code Online (Sandbox Code Playgroud)

由于数据包含 12 个月的数据,HoloViews 将根据经度和纬度创建 QuadMesh,使用深度作为值,然后提供一个滑块小部件来选择月份。它将把所有内容包装在一个 HoloMap 中,如下所示:

HoloMap containing 12 items of type QuadMesh
--------------------------------------------

Key Dimensions: 
     month: 1.0...12.0 
Deep Dimensions: 
     lon: -280.0...80.0 
     lat: -78.0...-44.6 
     depth: 3.5...4796.6 
Run Code Online (Sandbox Code Playgroud)

生成图

我想检索“月份滑块小部件”的值以更新另一个图,但我找不到访问它的方法。没有plot.get_widget_value()或类似的东西。有什么想法可以获取它的指针或处理程序吗?

python holoviews holoviz

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

hvplot.box 中的不同颜色

以下代码生成链接图像。它生成的大部分是我想要的,但我希望 Real 和 Pred 之间的框颜色不同。我该如何使用 Holoviews 或 Hvplot 来做到这一点?

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



df = pd.DataFrame(np.random.randn(20), columns=['Value'])
df['Source'] = ['Preds'] *10 +['Real'] * 10
df['Item'] = ['item1'] *5 + ['item2']*5 + ['item1'] *5 + ['item2']*5
df.hvplot.box(y='Value', by=['Item', 'Source'])
Run Code Online (Sandbox Code Playgroud)

我希望该图像的第一张图具有第二张图的风格

在此输入图像描述

python pandas holoviews hvplot

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

Holoviews:从分组条形图的 x 轴上删除变量名称

关于 HoloViews 分组(非堆叠)条形图的快速问题。如何删除 x 轴变量名称刻度,但将它们包含在图例中?

请参阅下面的示例:

没有图例和多余 xticks 的条形图

我想做以下事情:

  1. 对于红色框,删除刻度线“x”和“y”的名称
  2. 添加与各自颜色对齐的“x”和“y”图例。

代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import holoviews as hv
pd.options.plotting.backend = 'holoviews'

df1 = pd.DataFrame({
    'x': np.random.rand(10), 
    'y': np.random.rand(10),
})

my_plot = df1.plot(kind='bar')
my_plot
Run Code Online (Sandbox Code Playgroud)

谢谢你!

python bar-chart bokeh holoviews hvplot

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

将全息图保存为 SVG

我想将 Holoviews 图保存为 SVG,但是我收到一条我不明白的错误消息:

    np.random.seed(9)
    data = np.random.rand(10, 2)
    points = hv.Points(data)
    labels = hv.Labels({('x', 'y'): data, 'text': [chr(65+i) for i in range(10)]}, ['x', 'y'], 'text')
    overlay = (points * labels).redim.range(x=(-0.2, 1.2), y=(-.2, 1.2))
    
    overlay.opts(
        opts.Labels(text_font_size='10pt', xoffset=0.08),
        opts.Points(color='black', size=5))
    
    hv.save(overlay, 'overlay.svg', fmt='svg')
Run Code Online (Sandbox Code Playgroud)
    ---------------------------------------------------------------------------
    Exception                                 Traceback (most recent call last)
    <ipython-input-29-b23ca97e9c01> in <module>
          9     opts.Points(color='black', size=5))
         10 
    ---> 11 hv.save(overlay, 'overlay.svg', fmt='svg')
    
    ~/miniconda3/envs/mybrew/lib/python3.7/site-packages/holoviews/util/__init__.py in save(obj, filename, fmt, backend, resources, toolbar, title, **kwargs)
        818             filename = '.'.join(formats[:-1])
        819     return renderer_obj.save(obj, filename, fmt=fmt, …
Run Code Online (Sandbox Code Playgroud)

holoviews

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

使用 Datashader 和 Holoviews 具有多种颜色和图例的时间序列

我想绘制一个包含 3 列的时间序列数据框,每条曲线一列。我希望每条曲线都有自己的颜色,并显示图例,就像hvplot()默认情况下一样。

这是一个独立的示例:

import numpy as np
import pandas as pd
import hvplot.pandas
import datetime
from holoviews.operation.datashader import datashade

n=1000
start = datetime.datetime(2010, 10, 1, 0)   # Start time
datetimerange = [start + datetime.timedelta(minutes=1)*i for i in range(n)]
A = np.random.randint(5, size=n)
B = np.random.randint(20, 40, size=n)
C = np.random.randint(10, 20, size=n)
d = {'datetime': datetimerange, 'A': A, 'B': B, 'C': C}
df = pd.DataFrame(d).set_index('datetime')

df.hvplot(cmap=['red', 'blue', 'green']) + datashade(df.hvplot(cmap=['red', 'blue', 'green']))
Run Code Online (Sandbox Code Playgroud)

这是结果(左侧没有数据着色器,右侧有数据着色器):

在此输入图像描述

将绘图传递给数据着色器时,颜色和图例会丢失。使用datashade=True的参数hvplot …

python data-visualization holoviews datashader

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