2017-07-30 101 views
0

繪製太陽位置的常規方法是將小時方位(大致爲遠離北方的太陽位置)與高程(地平線以上的高度)相對應。在南半球,這意味着方位角從太陽正午的180度(如午夜)到0度不等。但是會議要求下午方位角從360度開始,到午夜時間減少180度。因此,有如下所示的圖像中的中午,其中方位角從0到360度進入的突然變化:matplotlib方位角vs仰角 - 原點的不連續性

example figure

我不能找到一種方法來改變x軸在matplotlib( pyplot),以便它在原點有這樣的不連續性。有什麼建議麼?

+0

您可以將數據分成兩部分(早上和下午分別)繪製到「軸」的正確區域,然後通過手動設置'xtick_labels'來實現翻轉。 –

+0

這似乎工作,但正如你所說,數據看起來不正確。該圖表看起來像是海拔與小時的關係圖,所以我認爲您的方位角計算是錯誤的。更精確的角度需要計算小時角度和緯度以及緯度。我會看看我是否可以使用我的數據與你的劇情代碼。 – icenov

回答

0

您可以將數據分爲兩部分(早上和下午分開)繪製到Axis的正確區域,然後通過手動設置xtick_labels來實現翻蓋。下面的例子,如何做到這一點的原則(數據不看着你的原始圖中的數據非常喜歡,雖然):

from matplotlib import pyplot as plt 
import numpy as np 


#latitude: 
lat = -36.55 

#declination: 
def delta(N): 
    return -23.44*np.cos(360/365*(N+10)) 

azimuth_morning = np.linspace(180,0,50) 
azimuth_afternoon = np.linspace(360,180,50) 

def zenith(azimuth, lat, N): 
    return np.rad2deg(np.arcsin(
     np.sin(np.deg2rad(lat))*np.sin(np.deg2rad(delta(N)))+ 
     np.cos(np.deg2rad(lat))*np.cos(np.deg2rad(delta(N)))* 
     np.cos(np.deg2rad(azimuth)) 
    )) 


def plot_sun_arc(ax, N): 
    ax.plot(180+azimuth_morning,zenith(azimuth_morning,lat,N),'k') 
    ax.plot(azimuth_afternoon-180,zenith(azimuth_afternoon,lat,N),'k') 

fig,ax = plt.subplots(figsize=(8,4)) 

for N in range(0,366,60): 
    plot_sun_arc(ax,N) 

xticks = [i for i in range(0,361, 20)] 
xtick_labels = ['{}'.format(t+180) if t < 180 else '{}'.format(t-180) for t in xticks] 

ax.set_xticks(xticks) 
ax.set_xticklabels(xtick_labels) 

ax.set_xlim([0,360]) 
ax.set_ylim([0,90]) 

plt.show() 

由此得出的數字是這樣的:

figure that results from the posted code