Добавляем легенду и раскрашиваем каждую полоску по-разному

Я пытаюсь построить график распределения классов.

import plotly.graph_objects as go
df = pd.read_csv('https://gist.githubusercontent.com/netj/8836201/raw/6f9306ad21398ea43cba4f7d537619d0e07d5ae3/iris.csv')
fig = go.Figure()
fig.add_trace(go.Histogram(histfunc="count",  x=df['variety'], showlegend=True))
fig

Это дает мне:

введите здесь описание изображения

Я хочу, чтобы легенда была Setosa, Versicolor, Virginica и каждая полоса была разного цвета.

Используя панды, я могу сделать (хотя там есть проблема с легендой):

ax = df['variety'].value_counts().plot(kind="bar")
ax.legend(df.variety.unique())

введите здесь описание изображения

Я хочу, чтобы это было интегрировано с plotly dash, поэтому я использую plotly go. Если кто-то может мне помочь с этой проблемой. Это было бы большим подспорьем для меня, так как я новичок в сюжете.


person Pygirl    schedule 19.06.2020    source источник


Ответы (1)


Одним из решений является добавление каждого следа отдельно для всех уникальных значений разновидности (или видов в моих данных). При добавлении каждой трассы используйте аргумент name, чтобы легенда могла быть заполнена соответствующим текстом. Так что-то вроде:

import plotly.graph_objects as go
import pandas as pd

df = pd.read_csv('iris.csv')

var = df.species.unique()
fig = go.Figure()
for v in var:
    fig.add_trace(go.Histogram(histfunc="count",  
                               x=df.species[df.species==v], 
                               showlegend=True,
                               name=v
                              )
                 )

fig

введите здесь описание изображения

person jayveesea    schedule 19.06.2020
comment
Как интегрировать это с сюжетным тире? - person Pygirl; 19.06.2020
comment
Я думаю, что стандартный метод - person jayveesea; 19.06.2020