我一直在试图理解如何完成这个非常简单的任务,即绘制两个数据集,每个数据集都有不同的颜色,但我在网上找到的东西似乎都做不到。下面是一些示例代码:
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])
目标是在一个帧中生成两个数据集,用一个分类列跟踪源。然后我试着画一个散点图。在
^{pr2}$这和预期的一样。但我似乎不明白如何根据source
列对两个数据集进行不同的着色。我尝试了以下方法:
scatter = hv.Scatter(ds, 'dsx', 'dsy', color='source')
scatter = hv.Scatter(ds, 'dsx', 'dsy', cmap='source')
都会发出警告,而且没有颜色。我试过了:
scatter = hv.Scatter(ds, 'dsx', 'dsy')
scatter.opts(color='source')
这会引发一个错误。我试着把它转换成一个Holoviews数据集,同样的类型。在
为什么本该如此简单的事情如此晦涩难懂?在
是的,我知道我可以把数据分开,叠加两个散点图,这样就会有不同的颜色。但肯定有一种方法可以基于分类数据来实现这一点。在
您可以在全息图中创建一个散射图,每个类别有不同的颜色,如下所示。它们都是优雅的一句话:
1)只需在数据帧上使用.hvplot()即可为您完成此操作。在
2)通过创建n覆盖散点图,如下所示:
^{pr2}$3)或doppler的答案稍作调整,将“category_col”设置为额外的vdim,然后用于颜色:
结果图:
如果要直接使用我的示例,则需要以下示例数据:
作为额外的:
我发现有趣的是,这个问题基本上有两种解决方案。
您可以创建高压散射()将分类列作为额外的vdim,提供颜色或2个单独的散点图,这些散点图由hv.N覆盖().
在后端高压散射()解决方案如下:
以及hv.N覆盖()后端如下所示:
这可能有帮助:http://holoviews.org/user_guide/Style_Mapping.html
具体地说,您不能对一个未声明、完全不模糊的维度使用
dim
转换:)应该带你去那里(我自己还没测试过)。在
相关:
Holoviews color per category
Overlay NdOverlays while keeping color / changing marker
相关问题 更多 >
编程相关推荐