【问题标题】:How does Holoviews know which colours to assign to each scatterplot in an overlay?Holoviews 如何知道将哪些颜色分配给叠加层中的每个散点图?
【发布时间】:2020-03-23 09:14:53
【问题描述】:

在散景 Holoviews 画廊中,有一个名为“Scatter Economic”的示例。

http://holoviews.org/gallery/demos/bokeh/scatter_economic.html#bokeh-gallery-scatter-economic

在此图中,请注意Scatter 的选项之一是 (color=Cycle('Category20'))。情节的最后一行是gdp_unem_scatter.overlay('Country')

  • 我的问题是:Holoviews 如何知道将每个Scatter 连接到Cycle('Category20') 中的特定颜色?这只是Cycle() 的属性吗? Overlay 是否有某种方式自动与 Scatter 和 Cycle 交互?
  • 一个稍微相关的困惑是,如果我使用 .opts 方法而不是示例中的单元魔法,它仍然有效。例如,如果我在 Scatter 上使用带有此循环颜色的 .opts 方法(即上例中倒数第二行),然后然后执行.overlay('Country'),不知何故Holoviews 知道根据国家/地区将每个 Scatter 分配给特定的颜色。

我想确保我正确地绘制了我的意图。

谢谢!

【问题讨论】:

    标签: overlay bokeh options holoviews


    【解决方案1】:

    现在可以使用所谓的 dim 表达式在 NdOverlay 中映射类别(如上例中使用的),然后定义一个表达式来进行映射:

    dim_expr = hv.dim('category').categorize({'A': 'red', 'B': 'green', 'C': 'blue'})
    overlay = hv.NdOverlay({chr(65+i): hv.Scatter(np.random.rand(10, 2)) for i in range(3)}, 'category')
    overlay.opts(hv.opts.Scatter(color=dim_expr))
    

    在此示例中,我们创建了一个 dim 表达式,它指向“类别”维度,然后将每个类别(“A”、“B”和“C”)映射到颜色(“红色”、“绿色” , '蓝色的')。然后我们将其分配给颜色选项。

    【讨论】:

      【解决方案2】:

      Holoviews 如何知道将每个 Scatter 连接到 Cycle('Category20') 中的特定颜色?这只是 Cycle() 的一个属性吗?是否有某种方式可以让 Overlay 自动与 Scatter 和 Cycle 交互?

      您说得对,CycleOverlay 旨在自动以这种方式进行交互。更明确地说,Cycle 中的每种颜色都被分配到叠加层的“层”,直到循环用完颜色并循环。

      例如,如果我在 Scatter 上使用带有此循环颜色的 .opts 方法(即上例中倒数第二行),然后执行 .overlay('Country'),Holoviews 会以某种方式知道根据国家/地区将每个 Scatter 分配给特定的颜色。

      这是因为在调用overlay 方法之前,您对opts 的调用自定义了数据结构元素的选项(此数据结构是HoloMap)。在那里设置的选项被传播到HoloMap 中的Scatter 元素,现在将指定选择的Cycle。这意味着当这些元素被放入叠加层时,HoloViews 可以适当地查找Cycle 并将其正确应用到叠加层。

      希望这是有道理的!

      【讨论】:

      • 谢谢@jlstevens!这确实有道理。我注意到进行覆盖的另一种方法是将彩色类别指定为 vdim 并将 color_index 作为 Scatter 中的选项。但是,这不允许点击图例。
      • 有没有办法指定哪些颜色映射到哪些类别?例如,如果我希望奥地利是红色的,比利时是蓝色的,等等; Holoviews 有这个功能吗?
      • 不幸的是,目前没有办法进行这样的显式映射,但我确实认为这是对功能请求的一个很好的建议。您介意在 HoloViews Github 存储库上提交有关此问题的问题吗?
      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2021-01-18
      • 2017-06-30
      • 1970-01-01
      • 2020-11-15
      • 2021-11-13
      相关资源
      最近更新 更多