[英]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.