Plotly / Dash: как принудительно обрезать края пузырьковой диаграммы?

#python #python-3.x #plotly #plotly-dash

Вопрос:

Возьмите следующий пример кода:

 import plotly.graph_objects as go

fig = go.Figure(data=[go.Scatter(
    x=[1, 2, 3, 4], y=[10, 11, 12, 13],
    text=['A<br>size: 40', 'B<br>size: 60', 'C<br>size: 80', 'D<br>size: 100'],
    mode='markers',
    marker=dict(
        color=['rgb(93, 164, 214)', 'rgb(255, 144, 14)',  'rgb(44, 160, 101)', 'rgb(255, 65, 54)'],
        size=[40, 60, 80, 100],
    )
)])

fig.show()
 

какие результаты…

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

При изменении размера красного пузырька на 300 , мы получаем…

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

Как вы можете видеть, оси x и y были масштабированы в соответствии с новым размером маркера.

Однако мне нужно, чтобы оси оставались неизменными, и, несмотря на увеличение размера маркера, его следует обрезать.

Это необходимо, так как мой проект предполагает включение и выключение пузырьков на другом графике (через обратный вызов), и когда пузырьки включены, диаграмма меняется по ширине.

Есть идеи, как выполнить статические оси x и y и обрезать маркеры независимо от размера?

cliponaxis=True похоже, это не дает желаемого результата.

Ниже приведен пример желаемой вырезки:

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

Ответ №1:

Это может быть достигнуто путем фиксации диапазона осей.

импортируйте plotly.graph_objects по ходу

 fig = go.Figure(data=[go.Scatter(
    x=[1, 2, 3, 4], y=[10, 11, 12, 13],
    text=['A<br>size: 40', 'B<br>size: 60', 'C<br>size: 80', 'D<br>size: 100'],
    mode='markers',
    marker=dict(
        color=['rgb(93, 164, 214)', 'rgb(255, 144, 14)', 'rgb(44, 160, 101)', 'rgb(255, 65, 54)'],
        size=[40, 60, 80, 500],
    ), cliponaxis=True
)])
fig.update_yaxes(range=[10, 13])
fig.update_xaxes(range=[1, 4])

fig.show()
 

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