簡體   English   中英

使用 Seaborn 和 Matplotlib 對齊熱圖和線圖的共享子圖中的 x 軸刻度

[英]Align x-axis ticks in shared subplots of heatmap and line plots using Seaborn and Matplotlib

使用共享 x 軸的 Seaborn 繪制熱圖和線圖,熱圖的刻度位於熱圖條的中間。

因此,底部線圖將繼承熱圖刻度 position 和標簽,不反映真實數據,因為線圖刻度應從零開始。

換句話說,我需要將兩個圖的刻度移動到從 x 軸原點開始(最佳),或者將線圖向右移動熱圖單元寬度的一半,保持刻度位置和標簽(hacky )。

下面的代碼快速重現了這個問題:

f,[ax_heat,ax_line]=plt.subplots(nrows=2,figsize=(10, 8),sharex=True)

data_heat = np.random.rand(4, 6)
data_line= np.random.randn(6,1)

sb.heatmap(data=data_heat,robust=True, center=0,cbar=False, ax=ax_heat)
sb.lineplot(data=data_line, ax=ax_line)

熱圖和線圖的子圖,線圖刻度移動

這是一個 hacky 解決方案,但您可以將 x 軸向左移動寬度的一半:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb

f,[ax_heat,ax_line]=plt.subplots(nrows=2,figsize=(10, 8),sharex=True)

data_heat = np.random.rand(4, 6)
data_line = np.random.randn(6,1)

# generalizable code regardless of spacing:
ax = sb.heatmap(data=data_heat,robust=True, center=0,cbar=False, ax=ax_heat)
width = ax.get_xticks()[1] - ax.get_xticks()[0]
new_ax = ax.get_xticks() - 0.5*width
ax.set_xticks(new_ax)
sb.lineplot(data=data_line, ax=ax_line)
plt.show()

在此處輸入圖像描述

要將兩個圖的刻度從 x 軸原點開始,只需在代碼末尾添加以下行:

plt.xticks(plt.xticks()[0] - 0.5)

解釋:

plt.xticks()返回 x-tick 位置和標簽,因此我們可以通過使用[0]索引來訪問這些位置。 原來這只是一個連續的 integer 值的列表,所以我們可以通過減去 0.5 將它們向左移動半個級別。

(部分復制自我對另一個問題的回答)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM