绘制太阳位置的传统方法是绘制每小时方位角(大致是太阳远离北方的位置)与海拔高度(地平线以上的高度)。在南半球,这意味着方位角的范围从 180 度(比如午夜)到太阳正午的 0 度。但是公约要求下午的方位角从 360 度开始,到午夜时减少到 180 度。所以中午有一个突变,方位角从 0 度变为 360 度,如下图所示:
我找不到改变 matplotlib (pyplot) 中的 x 轴的方法,以便它在原点有这样的不连续性。有什么建议么?
绘制太阳位置的传统方法是绘制每小时方位角(大致是太阳远离北方的位置)与海拔高度(地平线以上的高度)。在南半球,这意味着方位角的范围从 180 度(比如午夜)到太阳正午的 0 度。但是公约要求下午的方位角从 360 度开始,到午夜时减少到 180 度。所以中午有一个突变,方位角从 0 度变为 360 度,如下图所示:
我找不到改变 matplotlib (pyplot) 中的 x 轴的方法,以便它在原点有这样的不连续性。有什么建议么?
您可以将数据分成两部分(早上和下午分别)绘制到您的正确区域,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()
结果图如下所示: