#python #plotly #plotly-python
Вопрос:
Я хотел бы изменить граненую фигуру plotly.express так, чтобы каждая трасса имела свою собственную вторичную ось y. Я не хочу воссоздавать фигуру с нуля, используя стандартный API Plotly-python, если это возможно. См. Пример ниже.
import plotly.express as px
input_df = px.data.tips()
fig = px.scatter(input_df,
x = 'total_bill',
y = 'tip',
color = 'day',
facet_row = 'smoker',
facet_col = 'sex',
)
fig.layout.width = 800
fig.show()
Я хотел бы преобразовать вышеприведенное, чтобы каждая трассировка (или цвет) имела свою собственную вторичную ось y. Поэтому в этом случае я хотел бы получить 3 дополнительные оси y для каждой грани. Это моя попытка, но она не работает. Должен быть лучший способ. Я был бы признателен за любые идеи.
import plotly.graph_objects as go
yaxes = []
for trace in fig.data:
yaxisLabel = trace['yaxis']
if trace['yaxis'] in yaxes:
if yaxisLabel == 'y':
axisnumber = 0
else:
axisnumber = int(trace['yaxis'][1:])
newAxis_num = axisnumber 100 * yaxes.count(yaxisLabel)
exec(f"fig.layout.update(yaxis{newAxis_num} = go.layout.YAxis(overlaying='y', side='right'))")
trace.update({'yaxis': f'y{newAxis_num}'})
yaxes.append(yaxisLabel)
Комментарии:
1. Не могли бы вы немного уточнить свой желаемый результат? Вы просто хотели бы показать по одному следу на грань? Или вы хотели бы добавить вторичную ось к каждой грани? Если последнее верно, то я нахожу немного странным, что вам этого хочется
[...] convert the above so each trace (or color) has its own secondary y-axis
, поскольку на каждую грань приходится четыре, а не только два следа.2. Вестланд, да, это странная просьба для данного конкретного примера. Я хотел бы получить 3 дополнительные оси y для каждой грани. Спасибо за проявленный интерес.
3. @vestland Я отредактировал вопрос. Спасибо, что помогли мне прояснить