Plotly: выберите другое пересечение осей X и Y

#python #python-3.x #plotly

#питон #python-3.x #сюжетно

Вопрос:

В Plotly, чтобы создать точечные диаграммы, я обычно делаю следующее:

 fig = px.scatter(df, x=x, y=y)
fig.update_xaxes(range=[2, 10])
fig.update_yaxes(range=[2, 10])
 

Я хочу , чтобы оси yax пересекались с x=6 осями xaxis . Итак, вместо левой оси, представляющей отрицательные числа, я хочу, чтобы она была из [2,6] После пересечения, правая часть графика — из [6,10].

Аналогично, ось yaxis от нижней оси идет от [2,6]. Выше оси x она начинается с [6,10].

Как я могу сделать это в Plotly?

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

Комментарии:

1. Не могли бы вы нарисовать изображение для иллюстрации, пожалуйста? Извините, я не понимаю вашей логики.

2. уверен, что сделаю это сейчас

3. @S3DEV надеюсь, это поможет

4. @vestland — Насколько мне известно, это невозможно, как описывает OP. Вы сталкивались с этим раньше? rajn — Лично я бы установил значения осей по мере необходимости и оставил метки осей слева и внизу графика; данные будут в одном и том же месте, независимо от того, где находятся линии осей. Вы можете использовать shapes и рисовать жирные горизонтальные и вертикальные линии в середине графика, если хотите…

5. Звучит хорошо, и это то, что я сделал

Ответ №1:

Исходя из моего комментария, насколько мне известно, то, что вам нужно, в настоящее время недоступно.

Однако вот пример обходного пути, который использует shapes словарь для добавления горизонтальных и вертикальных линий, действующих как пересекающиеся оси, размещенные на требуемом вами пересечении x / y из 6.

Пример набора данных:

 import numpy as np

x = (np.random.randn(100)*2) 6
y1 = (np.random.randn(100)*2) 6
y2 = (np.random.randn(100)*2) 6
 

Пример кода для построения графика:

 import plotly.io as pio

layout = {'title': 'Intersection of X/Y Axes Demonstration'}
shapes = []
traces = []

traces.append({'x': x, 'y': y1, 'mode': 'markers'})
traces.append({'x': x, 'y': y2, 'mode': 'markers'})

shapes.append({'type': 'line', 
               'x0': 2, 'x1': 10,
               'y0': 6, 'y1': 6})
shapes.append({'type': 'line', 
               'x0': 6, 'x1': 6,
               'y0': 2, 'y1': 10})

layout['shapes'] = shapes
layout['xaxis'] = {'range': [2, 10]}
layout['yaxis'] = {'range': [2, 10]}

pio.show({'data': data, 'layout': layout})
 

Выходной сигнал:

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

Комментарии (TL;DR):

Приведенный здесь пример кода использует низкоуровневый Plotly API ( plotly.io ), а не удобную оболочку, такую как graph_objects или express . Причина в том, что я (лично) считаю, что пользователям полезно показывать, что происходит «под капотом», а не маскировать базовую логику кода удобной оболочкой.

Таким образом, когда пользователю потребуется изменить более мелкие детали графика, он будет лучше понимать list s и dict s, которые Plotly строит для базового графического движка (orca).

Ответ №2:

Я думаю fig.add_hline() , и fig.add_vline() это та функция, которая вам нужна.

Пример кода

 import plotly.express as px
import pandas as pd
df = pd.DataFrame({'x':[6,7,3], 'y':[4,5,6]})
fig = px.scatter(df, x='x', y='y')
fig.update_xaxes(range=[2, 10])
fig.update_yaxes(range=[2, 10])
fig.add_hline(y=4)
fig.add_vline(x=6)
fig.show()
 

Выходной сигнал
построение графика со смещенными осями