我有以下简单的pandas.DataFrame:
pandas.DataFrame
df = pd.DataFrame( { "journey": ['ch1', 'ch2', 'ch2', 'ch1'], "cat": ['a', 'b', 'a', 'c'], "kpi1": [1,2,3,4], "kpi2": [4,3,2,1] } )
我绘制如下:
import bokeh.plotting as bpl import bokeh.models as bmo bpl.output_notebook() source = bpl.ColumnDataSource.from_df(df) hover = bmo.HoverTool( tooltips=[ ("index", "@index"), ('journey', '@journey'), ("Cat", '@cat') ] ) p = bpl.figure(tools=[hover]) p.scatter( 'kpi1', 'kpi2', source=source) bpl.show(p) # open a browser
我未能根据cat. 最终,我希望第一个和第三个点使用相同的颜色,第二个和第四个点使用另外两种不同的颜色。
cat
如何使用 Bokeh 实现这一目标?
这是一种在某种程度上避免手动映射的方法。我最近偶然的bokeh.palettes,在这个问题github上,以及CategoricalColorMapper在这个问题上。这种方法结合了它们。在此处查看可用调色板的完整列表,并在此处查看CategoricalColorMapper详细信息。
bokeh.palettes
CategoricalColorMapper
我在让这个直接在 a 上工作时遇到了问题pd.DataFrame,并且还发现它在使用你的from_df()电话时不起作用。文档显示DataFrame直接传递 a ,这对我有用。
pd.DataFrame
from_df()
DataFrame
import pandas as pd import bokeh.plotting as bpl import bokeh.models as bmo from bokeh.palettes import d3 bpl.output_notebook() df = pd.DataFrame( { "journey": ['ch1', 'ch2', 'ch2', 'ch1'], "cat": ['a', 'b', 'a', 'c'], "kpi1": [1,2,3,4], "kpi2": [4,3,2,1] } ) source = bpl.ColumnDataSource(df) # use whatever palette you want... palette = d3['Category10'][len(df['cat'].unique())] color_map = bmo.CategoricalColorMapper(factors=df['cat'].unique(), palette=palette) # create figure and plot p = bpl.figure() p.scatter(x='kpi1', y='kpi2', color={'field': 'cat', 'transform': color_map}, legend='cat', source=source) bpl.show(p)
For the sake of completeness, here is the adapted code using low-levelchart:
为了完整起见,这里是使用低级图表的改编代码:
import pandas as pd import bokeh.plotting as bpl import bokeh.models as bmo bpl.output_notebook() df = pd.DataFrame( { "journey": ['ch1', 'ch2', 'ch2', 'ch1'], "cat": ['a', 'b', 'a', 'c'], "kpi1": [1,2,3,4], "kpi2": [4,3,2,1], "color": ['blue', 'red', 'blue', 'green'] } ) df source = bpl.ColumnDataSource.from_df(df) hover = bmo.HoverTool( tooltips=[ ('journey', '@journey'), ("Cat", '@cat') ] ) p = bpl.figure(tools=[hover]) p.scatter( 'kpi1', 'kpi2', source=source, color='color') bpl.show(p)
Note that the colors are "hard-coded" into the data.
请注意,颜色是“硬编码”到数据中的。
Here is the alternative using high-levelchart:
这是使用高级图表的替代方法:
import pandas as pd import bokeh.plotting as bpl import bokeh.charts as bch bpl.output_notebook() df = pd.DataFrame( { "journey": ['ch1', 'ch2', 'ch2', 'ch1'], "cat": ['a', 'b', 'a', 'c'], "kpi1": [1,2,3,4], "kpi2": [4,3,2,1] } ) tooltips=[ ('journey', '@journey'), ("Cat", '@cat') ] scatter = bch.Scatter(df, x='kpi1', y='kpi2', color='cat', legend="top_right", tooltips=tooltips ) bch.show(scatter)
你可以Scatter像这里一样使用更高级别
Scatter
or provide a color column to the ColumnDataSourceand reference it in your p.scatter(..., color='color_column_label')
ColumnDataSource
p.scatter(..., color='color_column_label')
或提供一个颜色列ColumnDataSource并在您的p.scatter(..., color='color_column_label')
原文链接:https://codingdict.com/