簡體   English   中英

Matplotlib 具有不同標簽和刻度的輔助 x 軸

[英]Matplotlib Secondary x-Axis with different Labels & Ticks

我想用兩個 x 軸 plot 東西。 但是 xticks 不對齊。 不知何故,邊距被忽略了?,在最終版本中。 xlabels 是不同的,這意味着僅在頂部顯示軸不是一種選擇。

import matplotlib.pyplot as plt
import numpy as np 

fig = plt.figure(figsize=(10.0, 4.0))
axs = fig.subplots(2, 2)

xticklabels = [str(x) for x in range(0, 40+1, 5)]
y = np.random.rand(41*8)
ax0 = axs[0,0].twiny()
axs[0,0].set_xticks(np.arange(0,41*8,5*8))
axs[0,0].set_xticklabels(xticklabels)
ax0.set_xlim(axs[0,0].get_xlim())
ax0.set_xticks(np.arange(0,41*8,5*8))
ax0.set_xticklabels(xticklabels)

axs[0,0].plot(y)

plt.show()

在此處輸入圖像描述

編輯:其實我想要這樣的東西:

import matplotlib.pyplot as plt
import numpy as np 

fig = plt.figure(figsize=(10.0, 4.0))
axs = fig.subplots(2, 2)

xticklabels = [str(x) for x in range(0, 40+1, 5)]
y = np.random.rand(41*8)
ax0 = axs[0,0].twiny()
axs[0,0].set_xticks(np.arange(0,41*8,5*8))
axs[0,0].set_xticklabels(xticklabels)
ax0.set_xlim(axs[0,0].get_xlim())
ax0.set_xticks(np.arange(10*8,31*8,5*8))
ax0.set_xticklabels(["0", "25", "50", "75", "100"])

axs[0,0].plot(y)

plt.show()

在此處輸入圖像描述

但正如您所看到的,刻度線不對齊。 我快瘋了!

如果您只想顯示第二個 x 軸(而不在其上繪制任何內容),則使用scondary axis可能會更容易。 您必須根據需要更改functions

import matplotlib.pyplot as plt
import numpy as np 

y = np.random.rand(41*8)

fig,ax = plt.subplots()
ax.set_xticks(np.arange(0,41*8,5*8))
xticklabels = [str(x) for x in range(0, 41, 5)]
ax.set_xticklabels(xticklabels)

secx = ax.secondary_xaxis('top', functions=(lambda x: x/8, lambda x: x/8))

ax.plot(y)
plt.show()

在此處輸入圖像描述


我認為twiny的問題是由於新軸上沒有數據,但我沒有設法讓它工作,即使在手動設置數據間隔之后也是如此。


根據評論和編輯問題更新

secx = ax.secondary_xaxis('top', functions=(lambda x: 5*x/8-50, lambda x: 5*x/8-50))
secx.set_xticks([0,25,50,75,100])
secx.set_xticklabels([f'{x}' for x in secx.get_xticks()])

在此處輸入圖像描述

好的,我現在的解決方法是簡單地用第二個軸繪制數據,沒有顏色。

import matplotlib.pyplot as plt
import numpy as np 


fig,axs = plt.subplots()

xticklabels = [str(x) for x in range(0, 40+1, 5)]
y = np.random.rand(41*8)

axs.set_xticks(np.arange(0,41*8,5*8))
axs.set_xticklabels(xticklabels)
ax0 = axs.twiny()

ax0.set_xticks(np.arange(10*8,31*8,5*8))
ax0.set_xticklabels(["0", "25", "50", "75", "100"])
axs.plot(y)
ax0.plot(y, color ="None")

plt.show()

暫無
暫無

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

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