2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
以下是子圖的示例圖,來(lái)自matplotlib
:
import matplotlib.pyplot as plt
import numpy as np
# Some example data to display
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, axs = plt.subplots(2, sharex=True)
fig.suptitle('Vertically stacked subplots')
axs[0].plot(x, y)
axs[1].plot(x, -y)
要添加你想要的元素,你可以使用axvlineand text; Text元素可以在圖的邊界之外(實(shí)際上刻度標(biāo)簽是Text)。
#continued from above:
axs[0].xaxis.set_visible(False)
axs[0].axvline(4.5, color='red')
axs[0].text(4.5, -.05, 'COG', color='red', transform=axs[0].get_xaxis_transform(),
? ? ? ? ? ? ha='center', va='top')
axs[1].axvline(4.5, color='red')
axs[1].text(4.5, -.05, 'COG', color='red', transform=axs[1].get_xaxis_transform(),
? ? ? ? ? ? ha='center', va='top')
您可以改為添加另一個(gè)勾號(hào)并更改其顏色:
#again, continued from the first code block
axs[0].xaxis.set_visible(False)
axs[0].axvline(4.5, color='red')
axs[0].text(4.5, -.05, 'COG', color='red', transform=axs[0].get_xaxis_transform(),
? ? ? ? ? ? ha='center', va='top')
ticks = [0, 1, 2, 3, 4, 4.5, 5, 6]
labels = [0, 1, 2, 3, 4, "COG", 5, 6]
axs[1].axvline(4.5, color='red')
axs[1].set_xticks(ticks)
axs[1].set_xticklabels(labels)
axs[1].get_xticklabels()[5].set_color('red')
但是,如果您不想在頂部圖表上打勾,那么添加Text(如第一個(gè)示例中所示)似乎是最簡(jiǎn)單的。此外,在第二個(gè)示例中手動(dòng)設(shè)置刻度似乎更冗長(zhǎng),并且存在選擇要更改的刻度的問(wèn)題(我在此處進(jìn)行索引axs[1].get_xticklabels()[5],但對(duì)于更多刻度/更復(fù)雜的數(shù)字,您可能需要更智能的東西)。所以我更喜歡第一種方法而不是這種方法,但它在某些情況下可能會(huì)有用(比如如果你想讓你的線出現(xiàn)在現(xiàn)有的刻度上)。

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
使用 Toms 的第一個(gè)例子可以得到預(yù)期的結(jié)果。
此外,對(duì)于標(biāo)簽上重疊文本的情況,我搜索了相鄰的刻度標(biāo)簽并將其透明度設(shè)置為 != 1。因此,文本“cog”始終可見。
import matplotlib.pyplot as plt
import numpy as np
xV = 4.5
dxV = 1/4 # best 1/4 of the spacing between two ticks
# Some example data to display
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, axs = plt.subplots(2, sharex=True)
fig.suptitle('Vertically stacked subplots')
axs[0].plot(x, y)
axs[0].xaxis.set_visible(False)
axs[0].axvline(xV, color='red')
axs[0].text(xV, -.05, 'COG', color='red', transform=axs[0].get_xaxis_transform(),
ha='center', va='top')
axs[1].plot(x, -y)
axs[1].axvline(xV, color='red')
axs[1].text(xV, -.05, 'COG', color='red', transform=axs[1].get_xaxis_transform(),
ha='center', va='top')
# Change Transparency if too close
xticks = axs[1].xaxis.get_major_ticks()
values = axs[1].get_xticks()
# values = axs[1].xaxis.get_major_locator()()
pos = np.where(np.logical_and( (xV-dxV) <= values, (xV+dxV) >= values))[0]
if pos.size > 0:
dist = np.abs(values[pos]-xV)
pos = pos[dist.argmin()]
xticks[pos].label1.set_alpha(0.5)
plt.show()
添加回答
舉報(bào)