Как установить xlim/ylim с помощью plotly imshow?

#python #plotly

Вопрос:

У меня возникли проблемы с определением диапазонов графиков x и y при использовании функции Plotly imshow.

Вот некоторые случайно сгенерированные данные и определенные границы участка:

 import numpy as np
img = np.random.randn(400,400)
xmin, xmax, ymin, ymax = 100, 200, 250, 350
 

с помощью matplotlib я могу сделать следующее, чтобы построить данные и установить границы графика x и y:

 import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.imshow(img, cmap='gray')
ax.set_xlim(xmin, xmax)
ax.set_ylim(ymax, ymin)
 

Что дает:

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

Но с сюжетом, когда я пытаюсь сделать то же самое с этим кодом:

 import plotly.express as px
fig = px.imshow(
    img,
    color_continuous_scale='gray',
)

fig.update_xaxes(range=[xmin, xmax])
fig.update_yaxes(range=[ymax, ymin])
fig.show()
 

Только ось x масштабируется соответствующим образом. Вот что я получаю:
введите описание изображения здесь

Как я могу правильно установить пределы x и y для моего участка с помощью plotly?

изменить: Я использую сюжетную версию 5.3.1

Ответ №1:

Вы упомянули, что вам нужна цветовая шкала, поэтому я попробовал разные вещи и подтвердил, что если я отключу автоматический выбор, то отобразится желаемая шкала и цветовая панель.

 import numpy as np
img = np.random.randn(400,400)
xmin, xmax, ymin, ymax = 100, 200, 250, 350

import plotly.express as px
fig = px.imshow(
    img,
    color_continuous_scale='gray',
)

fig.update_xaxes(range=[xmin, xmax])
fig.update_yaxes(range=[ymin, ymax], autorange=False)

fig.show()
 

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

У меня нет знаний, чтобы объяснить это, но вы можете добавить следующие параметры, чтобы получить желаемый квадратный график. Вот описание из официального справочника.

 fig = px.imshow(img, binary_string=True)
 

Передача данных изображения в виде двоичной строки
, введенной в plotly.py 4.10

px.imshow может передавать данные в объект figure либо в виде списка числовых значений, либо в виде двоичной строки png, которая передается непосредственно в браузер. В то время как первое решение обеспечивает большую гибкость (значения могут быть типа float или int, а значения масштабируются до диапазона [0-255] для строки изображения), использование двоичной строки обычно быстрее для больших массивов. Параметр binary_string определяет, передается ли изображение в виде строки png (при значении True) или списка значений (False). Его значение по умолчанию равно True для многоканальных изображений и False для одноканальных изображений. Когда binary_string=True, данные изображения всегда представляются с помощью go.Трассировка изображения.

 import plotly.express as px
fig = px.imshow(
    img,
    #color_continuous_scale='gray',
    binary_string=True
)

fig.update_xaxes(range=[xmin, xmax])
fig.update_yaxes(range=[ymax, ymin])
fig.show()
 

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

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

1. Смотрите это: ссылка

2. Спасибо @r-новичкам. Вы правы в том, что binary_string=True ключевое слово arg позволяет масштабировать ось y. Но тогда это делает невозможным объявление цветовой карты (например color_continuous_scale='balance' ). Это больше похоже на обходной путь, чем на решение. Я собираюсь подождать и посмотреть, появятся ли какие-либо другие решения, прежде чем отмечать это как ответ.

3. Ответ обновлен в ответ на комментарии. Если первый ответ не нужен, он будет удален. Я провел некоторое исследование, и обычно оно рассматривается как тепловая карта, но если binary_string=True , то оно определяется как изображение.

4. Вы обновили ответ идеально! autorange=False это и есть решение. Большое спасибо!