【问题标题】:How to display bokeh legends with scatter plots using a dataframe?如何使用数据框显示散点图的散景图例?
【发布时间】:2016-04-18 16:44:03
【问题描述】:

我有以下情节:

import pandas as pd
from bokeh.plotting import ColumnDataSource, figure, output_file, show
from bokeh.models import HoverTool

output_file("scatter.html")
df = pd.read_csv('/Users/jz/07_isolate_selection.csv')
hash = {}

c = ('aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 
    'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 
    'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 
    'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 
    'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 
    'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 
    'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 
    'gray', 'green', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 
    'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 
    'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 
    'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 
    'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 
    'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 
    'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 
    'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 
    'purple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 
    'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 
    'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen');


#loop through and assign colors:
counter = 0
for a in df.material.unique():
    hash[a] = c[counter]
    counter += 1

# generate colors:

colors = [hash[code] for code in df.material]
df['color'] = colors


source = ColumnDataSource(df)
TOOLS="pan,wheel_zoom,box_zoom,reset,hover"
p = figure(title="Hoverful Scatter", tools=TOOLS)
p.circle('peak.count', 'purity.score', radius=.66, source=source,
          fill_color=colors, fill_alpha=0.6, line_color=None)

hover = p.select(dict(type=HoverTool))[0]
hover.tooltips = [
    ("material", "@material")
]

show(p)

如何显示与 df.material 列中定义的组相对应的图例?颜色编码在下面起作用,我按 df.material 对圆圈进行分组,但我还想显示一个图例,以便您知道“aliceblue”对应于“FOO”,“橄榄”对应于“BAR”作为例子。

谢谢!

【问题讨论】:

标签: python scatter-plot bokeh


【解决方案1】:

我的线图也有类似的问题,我的解决方案是将 p.line() 添加到 for 循环中。检查这个简单的例子here

还可以通过更复杂的示例检查my notebook,我使用此方法制作了多线图。

祝你好运!

【讨论】:

    【解决方案2】:

    散景 0.12.3

    您可以尝试使用字典为您的数据框 df 创建一个“颜色”列,比如说:

    colors = {'typeA':'red', 'typeB':'blue', 'typeC':'black'}
    

    colors.keys() 来自 df 的 typeColumn 上的值

    现在您将颜色列添加到 df:

    df['colorColumn'] = [colors[key] for key in df.typeColumn.values]
    

    所以您只需要从您刚刚定义的源访问这些列

    p.circle('x', 'y', size=8, fill_color='colorColumn', legend='typeColumn', source=source)
    

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2016-12-29
      • 1970-01-01
      相关资源
      最近更新 更多