[英]How to share the x axis in reverse between two subplots in matplotlib?
我想展示一個主題的兩個不同解剖視圖,正面和背面,我希望兩者之間的坐標保持一致,同時還顯示它們,就像您自然看到的那樣。 這意味着 X 軸應該在前視圖中向右增加,在后視圖中向左增加。
我希望導航操作(平移、縮放)同時影響兩個視圖。 例如,如果我在前視圖中放大對象的左肩(位於圖像的右側),我希望后視圖也放大左肩(位於圖像的左側)圖片的一側)。
通常這是通過與sharex
和sharey
參數共享軸來實現的。 然而,正如我所說,我希望第二個子圖中的 X 軸(並且只有 X 軸)被反轉,並且該選項以相同的方式將兩個子圖中的限制強制為 go。
有什么辦法可以做到這一點?
好吧,似乎沒有針對我要實現的目標已經實現的特定功能,所以經過一些修改之后,這是我能夠想到的最簡單的功能。
我將其集成到一個 Qt 應用程序中,我已經修改了導航工具欄以隱藏一些操作並更改一些快捷方式。 我最終做的是從我的自定義導航工具欄 class 覆蓋以下方法:
class CustomNavigationToolbar(NavigationToolbar):
...
def release_zoom(self, event) -> None:
zoom_axes = self._zoom_info.axes[0]
other_axes = [a for a in self.canvas.figure.get_axes() if a != zoom_axes][0]
super().release_zoom(event)
other_axes.set_ylim(zoom_axes.get_ylim())
other_axes.set_xlim(reversed(zoom_axes.get_xlim()))
self.canvas.draw_idle()
def drag_pan(self, event) -> None:
pan_axes = self._pan_info.axes[0]
other_axes = [a for a in self.canvas.figure.get_axes() if a != pan_axes][0]
super().drag_pan(event)
other_axes.set_ylim(pan_axes.get_ylim())
other_axes.set_xlim(reversed(pan_axes.get_xlim()))
self.canvas.draw_idle()
對於縮放操作,在釋放鼠標按鈕時更新視圖( release_zoom
方法),因此我先獲取其他軸,在調用super()
之后,我根據縮放軸更新 X 和 Y 限制。 平移動作也是如此,但它會在拖動鼠標時更新( drag_pan
方法)。
請注意,這適用於我的用例,因為我保證只有兩個軸,但適應兩個以上的軸並不困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.