Построение объединенной тепловой карты и карты кластеров, проблемы с добавлением двух цветных полосPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Построение объединенной тепловой карты и карты кластеров, проблемы с добавлением двух цветных полос

Сообщение Anonymous »

У меня есть два набора данных omics, которые я хотел бы сравнить. Для этого я рисую один из них в виде кластерной карты, извлекаю из него порядок и рисую точно такие же гены в качестве тепловой карты, чтобы я мог провести прямое сравнение между двумя наборами данных. Однако я хотел бы показать цветные полосы для обоих, и, похоже, не могу заставить это работать.
  • цветная полоса для карты кластера (слева) находится там, где Мне это нужно, и размер, который мне нужен, однако он не показывает отметки Y для диапазона моих данных.
  • цветная полоса тепловой карты (справа) находится не там, где я хочу, слишком большой, а также не показывает галочек. Мне бы хотелось, чтобы она была точно такой же, как первая цветная полоса, но с правой стороны.
Я использовал это для объединения двух графиков, а это для настройки цветовая полоса карты кластера, но она не работает как функция тепловой карты. Я экспериментировал с cbar_kws, но не думаю, что это позволяет мне делать то, что я хочу, хотя я не до конца понимаю его потенциал.
Использование Python в VScode;

Код: Выделить всё

import matplotlib.gridspec

#clustermap from averaged protein data!
g = sns.clustermap(hmprot, figsize=(8,12), col_cluster=False, yticklabels=True, cmap = 'viridis')

labels = [t.get_text() for t in g.ax_heatmap.yaxis.get_majorticklabels()]

g.gs.update(left=0.05, right=0.49)

#create new gridspec for the right part
gs2 = matplotlib.gridspec.GridSpec(1,1)

hmrna = hmrna.reindex(index=labels)

# create axes within this new gridspec
ax2 = g.fig.add_subplot(gs2[0])

# get position of heatmap
heatmap_bbox = g.ax_heatmap.get_position()
ax2.set_position([0.5, heatmap_bbox.y0, .35, heatmap_bbox.height])

# plot heatmap in the new axes
sns.heatmap(hmrna, ax=ax2, cmap = 'viridis', cbar=True, yticklabels=True,
cbar_kws= dict(use_gridspec=False,location = 'right', shrink= 0.5))

#change font size for the genes on the y-axis
g.tick_params(axis='y', labelsize=6, labelright = False, right=False)
g.tick_params(axis='x', labelbottom = True, bottom=False)
ax2.tick_params(axis='y', labelsize=8, labelright=True, left=False, labelleft=False, labelrotation = 0)
ax2.tick_params(axis='x', labelbottom = True, bottom=False)

#then adjusting the labels for each axis individually
# g.set_xlabel(' ') -> Doesn't work
ax2.set_xlabel(' ')
ax2.set_title('RNAseq', weight="bold")
# ax2.set_title('Proteomics(C)', weight="bold")   -> Doesn't work

x0, _y0, _w, _h = g.cbar_pos
g.ax_cbar.set_position([0.01, 0.04, 0.02, 0.1])
g.ax_cbar.set_title('Z-score')
g.ax_cbar.tick_params(axis='x', length=10)

title = "Clustermap of Protein (left) & RNA (right) " + str(GO_term)

plt.suptitle(title, weight="bold", fontsize=20, y=0.85)
fig.tight_layout()

plt.show()

Я также попробовал упомянутое здесь предложение со следующим кодом;

Код: Выделить всё

cbar_2_ax = fig.add_axes([0.95, 0.04, 0.02, 0.1])
cbar_2 = mp.colorbar(ax2, cax=cbar_2_ax)

После этого я получаю сообщение об ошибке: у объекта «Axes» нет атрибута «get_array».
Я не уверен, как действовать дальше, возможно, я использую не те функции чтобы изменить это, но мне не удалось найти что-то работающее.
Кроме того, мне удалось «настроить» тепловую карту с собственным заголовком и удалить метку «группа». по оси х. Мне не удалось понять, как сделать то же самое для карты кластера, присвоить ей собственный заголовок и удалить метку «группа». Те же функции для тепловой карты здесь не работают.
Фиктивная версия моего кода, которая воспроизводит мои проблемы. Как исправить правильную цветовую панель?
Некоторая фиктивная версия моего кода, воспроизводящая проблему:

Код: Выделить всё

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

#clustermap from df1
g = sns.clustermap(df, figsize=(12,18), col_cluster=False, yticklabels=True, cmap = 'viridis')

g.gs.update(left=0.05, right=0.49)

#create new gridspec for the right part
gs2 = matplotlib.gridspec.GridSpec(1,1)

# create axes within this new gridspec
ax2 = g.fig.add_subplot(gs2[0])

# get position of heatmap
heatmap_bbox = g.ax_heatmap.get_position()
ax2.set_position([0.5, heatmap_bbox.y0, .35, heatmap_bbox.height])
# plot boxplot in the new axes
sns.heatmap(df2, ax=ax2, cmap = 'viridis', cbar=True, yticklabels=True,
cbar_kws= dict(use_gridspec=False,location = 'right', shrink= 0.5)
)

g.tick_params(axis='y', labelsize=6, labelright = False, right=False)
g.tick_params(axis='x', labelbottom = True, bottom=False)
ax2.tick_params(axis='y', labelsize=8, labelright=True, left=False, labelleft=False, labelrotation = 0)
ax2.tick_params(axis='x', labelbottom = True, bottom=False)

ax2.set_title('title', weight="bold")  # Set a custom title

x0, _y0, _w, _h = g.cbar_pos
g.ax_cbar.set_position([0.01, 0.04, 0.02, 0.1])
g.ax_cbar.set_title('Z-score')
g.ax_cbar.tick_params(axis='x', length=10)

title = "Clustermap (left) & heatmap (right) "
plt.suptitle(title, weight="bold", fontsize=20, y=0.85)
fig.tight_layout()
plt.show()

Ниже приведен результат выполнения этого кода. Я выделил проблемы, которые надеюсь исправить.
Изображение
Изображение


Подробнее здесь: https://stackoverflow.com/questions/784 ... -colorbars
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»