Давайте прыгнем прямо к ответу и пролить свет на детали позже. Чтобы установить цвета для ваших go.box
фигур, вам нужно разделить набор данных по группам, которые вы хотите изучить, и назначить цвет для каждой подкатегории, используя line=dict(color=<color>)
. Приведенный ниже фрагмент кода покажет вам, как использовать встроенный цветовой цикл plotlys, чтобы получить тот же результат, что и при использовании plotly express без указания каждого цвета для каждой категории. Вам также нужно установить boxmode='group'
для макета фигуры, чтобы блоки не отображались сверху друг друга.
График 1 - Использование go.box
:
Код 1 - Использование go.box
:
# imports
import plotly.graph_objects as go
import plotly.express as px
fig=go.Figure()
for i, smokes in enumerate(df['smoker'].unique()):
df_plot=df[df['smoker']==smokes]
#print(df_plot.head())
fig.add_trace(go.Box(x=df_plot['time'], y=df_plot['total_bill'],
notched=True,
line=dict(color=colors[i]),
name='smoker=' + smokes))
fig.update_layout(boxmode='group', xaxis_tickangle=0)
fig.show()
Теперь для ...
как определить цвета для ящиков?
... part.
Цвет ящиков определяется fillcolor
, по умолчанию полупрозрачный вариант цвета линии. В приведенном выше примере вы можете установить прозрачный зеленый цвет для всех ящиков, используя fillcolor='rgba(0,255,0,0.5)'
:
График 2: fillcolor='rgba(0,255,0,0.5)'
Или вы можете ссылаться на разные цвета одного и того же цветового цикла, который вы используете для цветов линий, используя смещенную версию списка цветов, такую как fillcolor=colors[i+4]
Сюжет 3: fillcolor=colors[i+4]
Абсолютно самая простая вещь, которую нужно сделать, чтобы установить линию и Цвет заливки будет просто установить line=dict(color='black')
и fillcolor='yellow'
для всех групп:
Сюжет 4: Вернуться к основам
Полный код:
# imports
import plotly.express as px
import plotly.graph_objects as go
# data
df = px.data.tips()
# plotly setup
fig=go.Figure()
# a plotly trace for each subcategory
for i, smokes in enumerate(df['smoker'].unique()):
df_plot=df[df['smoker']==smokes]
fig.add_trace(go.Box(x=df_plot['time'], y=df_plot['total_bill'],
notched=True,
line=dict(color='black'),
#line=dict(color=colors[i]),
fillcolor='yellow',
#fillcolor=colors[i+4],
name='smoker=' + smokes))
# figure layout adjustments
fig.update_layout(boxmode='group', xaxis_tickangle=0)
fig.show()
Некоторые подробности обо всем этом:
Как этого добиться то же самое в Plotly Go? Поскольку свойство color не распознается как действительное.
Если вы изучите документацию по go.box
, вы быстро обнаружите, что go.box
не имеет метода color
, а px.box
имеет получил это:
color: str or int or Series or array-like
Either a name of a column in `data_frame`, or a pandas Series or
array_like object. Values from this column or array_like are used to
assign color to marks.
Другими словами, что color
в px.Box
делает для вас, это разбить набор данных, например, на уникальные группы в наборе данных длинного формата, например px.data.tips()
Когда дело доходит до go.box
, такого метода не существует, и вам просто нужно принять ValueError:
ValueError: Недопустимое свойство, указанное для объекта типа plotly.graph_ob js .Box: 'color'