Как создать вторичные оси y из плоско выраженной фасетной фигуры?

#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 Я отредактировал вопрос. Спасибо, что помогли мне прояснить