2013-08-29 38 views
1

我已經寫了一個GUI,顯示了一個隧道部分的原理圖和感應解決方案。上面的圖表將其縱橫比設置爲「自動」。下方的地塊將其縱橫比設置爲「相等」(因爲隧道否則會失真)。這些圖有x軸共享。由於sharex和縱橫比相等,Matplotlib設置的軸限制與顯示的限制不匹配

我遇到的問題是下圖的y軸不顯示所有數據。當我打印出下面的圖的y限制時,y限制是(-20,100),它應該允許它顯示所有的數據。解決這個問題的辦法是增加x的限制,但我無法弄清楚如何以編程的方式做到這一點,因爲從下面的圖輸出的y限制不是可見的限制,大約是(-2,84)。

任何想法或修復?

Screenshot of issue

MWE:

import matplotlib.pyplot as plt 

fig, (ax1, ax2) = plt.subplots(2,1,sharex=True) 

ax1.plot([-10,0,10,-10],[-1,1,-1,-1]) 
ax2.plot([-5,-5,5,5,-5],[-10,10,10,-10,-10]) 
ax2.set_aspect('equal') 
print(ax2.get_ylim()) 
plt.show() 
+0

如果您想保持x軸共享,我相信您必須放大底部的座標軸高度,或者接受上部座標圖的限制會發生變化,以及在更改底部座標圖的限制時也會發生變化。 – hooy

+0

我很高興x軸顯示的數據限制超過數據限制,如果它阻止切斷下面的圖中的數據。問題是我無法弄清楚擴展x軸的程度,因爲我沒有計算y軸實際顯示的程度的方法。如果我知道y軸實際顯示的多少,我可以說xlimNew =(yLim/yViewable)* xLimOld。 有沒有一種方法可以確定繪圖視圖的界限而不是繪圖數據的界限? – CrazyArm

+0

您是否嘗試設置'ax.set_ylim([min,max])'(並讓它根據需要更改x軸)? – tacaswell

回答

0

這挖了一下,下入膽量,但

w = ax.get_window_extent(None).width 
h = ax.get_window_extent(None).height 

應該讓你的屏幕上(您可能需要通過ax.figure.canvas.renderer代替None)高度和寬度。

然後您知道(xmax-xmin)/(ymax-ymin)之間的比率,並可以相應地設置您的x限制。

這裏的根本問題是你有一組相互關聯的數字,你只能指定它們的一個子集。

+0

好,這是一個很好的解決方法,代碼應該很簡單,可以將像素或get_window_extent輸出的任何內容轉換爲數據單元。謝謝! – CrazyArm

+0

它是輸出像素。可能有更好的方法來做到這一點,但這是首先想到的。 – tacaswell