使用分类变量定义散景散点图中的颜色和标记

时间:2018-04-01 18:18:39

标签: python bokeh scatter

我有一个带有两个数据列的pandas数据框(为简单起见,我们将它们称为'x'和'y'),以及一个分类列(比如'color',其值为'red','green'和'blue “)。现在我想使用散景来生成带有不同标记符号的散点图('红色' - >'x','绿色' - >'o'和'蓝色' - >'三角')。

虽然我找到了一个解决方案,我手动提取了'x'和'y'值的相关部分,但我认为应该可以在一个命令中使用散景中的“分类”绘图来完成此操作。但是,文档主要考虑条形图,当我尝试在ColumnDataSource中使用df.groupby('color')的结果时,在散布(使用source = source)中绘制'x'和'y'失败,因为列找不到名字'x'和'y'。

以下是说明问题的示例代码:

import pandas as pd
import bokeh.plotting as plt

df = pd.DataFrame(data=[[0., 0., 'red'], [1., 0., 'red'], [1., 1., 'green'],
                        [1., 2., 'blue'], [2., 1., 'blue']],
                  columns=['x', 'y', 'color'])
source = plt.ColumnDataSource(df.groupby('color'))
# source = plt.ColumnDataSource(df) -- this would work for colors
fig = plt.figure()
fig.scatter('x', 'y', color='color', source=source)
plt.show(fig)

此代码段显示了所需的最低要求。没有groupby,color ='color'实际上有效,但在我的实例中,分类变量具有非颜色值。此外,我如何指定多个符号?

1 个答案:

答案 0 :(得分:1)

GroupBy传递给CDS对您没有帮助,因为这会创建汇总数据的CDS ,但您需要所有单独的点。以下是CDSView中描述的使用GroupFilterimport pandas as pd from bokeh.io import show from bokeh.models import ColumnDataSource, CDSView, GroupFilter from bokeh.plotting import figure df = pd.DataFrame(data=[[0., 0., 'red'], [1., 0., 'red'], [1., 1., 'green'], [1., 2., 'blue'], [2., 1., 'blue']], columns=['x', 'y', 'color']) source = ColumnDataSource(df) # create views for the different groups red = CDSView(source=source, filters=[GroupFilter(column_name='color', group='red')]) green = CDSView(source=source, filters=[GroupFilter(column_name='color', group='green')]) blue = CDSView(source=source, filters=[GroupFilter(column_name='color', group='blue')]) p = figure() # use the views with different glyphs p.circle('x', 'y', size=15, color='red', source=source, view=red) p.square('x', 'y', size=15, color='green', source=source, view=green) p.triangle('x', 'y', size=15, color='blue', source=source, view=blue) show(p) 完成所要求的一种方法:

source.group

Providing Data for Plots and Tables

看来似乎有一些非常简单易行的改进可以减少代码量(例如,可能CDSView方法来完成那些$(.product_qty).val();行所做的所有工作,或者可能是指定组的字形方法的参数)。我鼓励您提交plot of grouped data进一步讨论。