Я создал тепловую карту, используя пакет seaborn и matplotlib в python, и, хотя он идеально подходит для моих текущих потребностей, я действительно предпочел бы, чтобы метки на оси X тепловой карты были размещены в верхней части графика. , а не внизу (что, кажется, по умолчанию).
Итак, сокращенная форма моих данных выглядит так:
NP NP1 NP2 NP3 NP4 NP5
identifier
A1BG~P04217 -0.094045 0.012229 0.102279 1.319618 0.002383
A2M~P01023 -0.805089 -0.477339 -0.351341 0.089735 -0.473815
AARS1~P49588 0.081827 -0.099849 -0.287426 0.101588 0.136366
ABCB6~Q9NP58 0.109911 0.458039 -0.039325 -0.484872 1.905586
ABCC1~I3L4X2 -0.560155 0.580285 0.012868 0.291303 -0.407900
ABCC4~O15439 0.055264 0.138630 -0.204665 0.191241 0.304999
ABCE1~P61221 -0.510108 -0.059724 -0.233365 0.078956 -0.651327
ABCF1~Q8NE71 -0.348526 -0.135414 -0.390021 -0.190644 -0.276303
ABHD10~Q9NUJ1 0.237959 -2.060834 0.325901 -0.778036 -4.046345
ABHD11~Q8NFV4 0.294587 1.193258 -0.797294 -0.148064 -1.153391
И когда я использую следующий код:
import seaborn as sns
import matplotlib as plt
fig, ax = plt.subplots(figsize=(10,30))
ax = sns.heatmap(df_example, annot=True, xticklabels=True)
Я получаю такой сюжет: https://imgpile.com/i/T3zPH1
Я должен отметить, что этот график был сделан из сокращенного фрейма данных выше, фактический фрейм данных имеет тысячи идентификаторов, что делает его очень длинным.
Но, как вы можете видеть, метки на оси x отображаются только внизу. Я пытался сделать так, чтобы они отображались вверху, но Seaborn, похоже, не допускает такого форматирования.
Поэтому я также пытался использовать plotly express, но, хотя я решил проблему с размещением меток по оси x сверху, я совершенно не смог отформатировать тепловую карту, как я делал это до использования seaborn. Следующий код:
import plotly.express as px
fig = px.imshow(df_example, width= 500, height=6000)
fig.update_xaxes(side = "top")
fig.show()
получается такой сюжет: https://imgpile.com/i/T3zF42.
Я много раз пытался переформатировать его, используя документацию от plotly (https://plotly.com/python/heatmaps/), но не могу заставить его работать. Когда одно исправлено, возникает другая проблема. Я действительно просто хочу продолжать использовать код, основанный на Seaborn, как указано выше, и просто исправить метки оси X. Я также рад иметь метку оси X как вверху, так и внизу графика, но сейчас я не могу получить эту работу. Может ли кто-нибудь посоветовать мне, что здесь делать?
Вопросы по SO не должны быть более одной темы. Если у вас есть морской вопрос, то задайте вопрос о сиборн. Если у вас есть сюжетный вопрос, опубликуйте отдельный вопрос. Пример из документации в разделе Настройка осей и меток на тепловой карте работает без проблем fig = px.imshow(df, labels=dict(x = "NP", y = "Identifier"), x=df.columns, y=df.index); fig.update_xaxes(side = "top")
Если ваши данные хранятся в файле csv, вы можете использовать этот код:
import pandas as pd
import plotly.express as px
df = pd.read_csv("file.csv").round(2)
fig = px.imshow(df.iloc[:,1:],
y = df['identifier'],
text_auto=True, aspect = "auto")
fig.show()
Данные в файле CSV имеют следующий формат:
identifier NP1 NP2 NP3 NP4 NP5
A1BG~P04217 -0.094045 0.012229 0.102279 1.319618 0.002383
A2M~P01023 -0.805089 -0.477339 -0.351341 0.089735 -0.473815
AARS1~P49588 0.081827 -0.099849 -0.287426 0.101588 0.136366
ABCB6~Q9NP58 0.109911 0.458039 -0.039325 -0.484872 1.905586
ABCC1~I3L4X2 -0.560155 0.580285 0.012868 0.291303 -0.407900
ABCC4~O15439 0.055264 0.138630 -0.204665 0.191241 0.304999
ABCE1~P61221 -0.510108 -0.059724 -0.233365 0.078956 -0.651327
ABCF1~Q8NE71 -0.348526 -0.135414 -0.390021 -0.190644 -0.276303
ABHD10~Q9NUJ1 0.237959 -2.060834 0.325901 -0.778036 -4.046345
ABHD11~Q8NFV4 0.294587 1.193258 -0.797294 -0.148064 -1.153391
Теперь давайте отобразим верхнюю часть тепловой карты по оси X, добавив:
fig.update_layout(xaxis = dict(side = "top"))
Альтернативное решение, если у вас старая версия Plotly:
fig = go.Figure(data=go.Heatmap(
x=df.columns[1:],
y=df.identifier,
z=df.iloc[:,1:],
text=df.iloc[:,1:],
texttemplate = "%{text}"))
fig.update_layout(xaxis = dict(side = "top"))
fig.show()
Да, у меня также возникают проблемы с загрузкой изображений в Stackoverflow, поэтому я использовал imgpile в своем посте. К сожалению, ваше решение не работает для меня, так как параметр text_auto
не работает в методе imshow в моей текущей версии plotly. По разным причинам я не могу изменить свою версию сюжета в текущей среде.
Хорошо, поэтому я провел еще немного исследований, и оказалось, что вы можете добавить следующий код с морским подходом:
plt.tick_params(axis='both', which='major', labelsize=10, labelbottom = False, bottom=False, top = False, labeltop=True)
Это здорово, но ваш вопрос был на Plotly.
@Hamzah, мой вопрос касался как сюжета, так и морского происхождения. Я предпочел сохранить морской подход, поскольку он лучше форматировал мою тепловую карту.
Если автотекст недоступен, в справочниках есть примеры. Укажите строку аннотации в тексте и укажите этот текст в текстовом шаблоне. Пожалуйста, обратитесь к ссылке