首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matplotlib方位角与高程-原点不连续

matplotlib方位角与高程-原点不连续
EN

Stack Overflow用户
提问于 2017-07-30 13:42:22
回答 1查看 829关注 0票数 0

绘制太阳位置的传统方法是绘制每小时的方位角(大致是太阳远离北方的位置)与海拔(地平线以上的高度)。在南半球,这意味着方位角的范围从180度(比如午夜上午)到太阳正午的0度。但是,约定要求下午的方位角从360度开始,到午夜时减小到180度。所以在中午有一个突然的变化,方位角从0度到360度,如下图所示:

我找不到一种方法来改变matplotlib (pyplot)中的x轴,使它在原点具有这样的不连续性。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-30 15:48:03

您可以将数据分成两部分(上午和下午分别绘制)到Axis的正确区域,然后通过“手动”设置xtick_labels来实现翻转。下面是一个原则上如何做到这一点的示例(尽管数据看起来并不是很像原始图表中的数据):

代码语言:javascript
复制
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()

生成的图如下所示:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45396750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档