Как добавить легенду в круговой график Python's Bokeh - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть следующий код:

from bokeh.plotting import figure, show, output_file
from bokeh.sampledata.iris import flowers

colormap = {'setosa': 'red', 'versicolor': 'green', 'virginica': 'blue'}
colors = [colormap[x] for x in flowers['species']]

p = figure(title = "Iris Morphology")
p.xaxis.axis_label = 'Petal Length'
p.yaxis.axis_label = 'Petal Width'

p.circle(flowers["petal_length"], flowers["petal_width"],
         color=colors, fill_alpha=0.2, size=10)

output_file("iris.html", title="iris.py example")

show(p)

Который производит этот участок

enter image description here

Как я могу добавить легенду, основанную на цвете круга, к сюжету? Где:

  • сето: красный
  • разноцветный: зеленый
  • virginica: синий

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете использовать цикл for для его построения:

from bokeh.plotting import figure, show, output_file
from bokeh.sampledata.iris import flowers

colormap = {'setosa': 'red', 'versicolor': 'green', 'virginica': 'blue'}
colors = [colormap[x] for x in flowers['species']]


p = figure(title = "Iris Morphology")
p.xaxis.axis_label = 'Petal Length'
p.yaxis.axis_label = 'Petal Width'


for specie in colormap.keys():
    df = flowers[flowers['species']==specie]
    p.circle(df["petal_length"], df["petal_width"],
             color=colormap[specie], fill_alpha=0.2, size=10, legend=specie)

p.legend.location = "top_left"


output_file("iris.html", title="iris.py example")

show(p)

enter image description here

0 голосов
/ 01 мая 2018

Самый простой способ, который приходит на ум - это определить ColumnDataSource для вашего графика, на который вы передаете свои данные, и оттуда ссылаться на столбец с данными "species" из вашего фрейма данных.

Вот ваш код переделки с использованием этого решения:

from bokeh.plotting import ColumnDataSource, figure, show, output_file
from bokeh.sampledata.iris import flowers

from bokeh.plotting import (ColumnDataSource, figure, show, output_file)
from bokeh.sampledata.iris import flowers

colormap = {'setosa': 'red', 'versicolor': 'green', 'virginica': 'blue'}
colors = [colormap[x] for x in flowers['species']]
flowers['colors'] = colors

source = ColumnDataSource(flowers)

p = figure(title = "Iris Morphology")
p.xaxis.axis_label = 'Petal Length'
p.yaxis.axis_label = 'Petal Width'

p.circle("petal_length", "petal_width",
         color='colors', fill_alpha=0.2, size=10, legend='species',source=source)
p.legend.location = "top_left"

output_file("iris.html", title="iris.py example")

show(p)

И это то, что вы должны получить. Я дополнительно поставил легенду справа, чтобы она не вставлялась поверх сюжета:

Plot with solution

...