#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
это и есть решение. Большое спасибо!