6
\ begingroup美元

太阳辐射是控制$O_3$形成的重要因素之一,从而影响大气中各种次生物种的水平。

然而,在环境$PM_{2.5}$采样活动中,我没有仪器来获取实际的太阳辐射数据。由于太阳辐射主要可以通过太阳的高度程度来计算,所以我开始寻找一种在洁净天空条件下计算理想值的方法。

我发现pysolar是解决这类问题的潜在工具。通过简单地定义位置(Lon, Lat)和日期时间,就可以生成以$W/m^2$为单位的太阳辐射。

但是,这里的输出结果似乎很奇怪。


下面是一个使用Python 3.4的例子:

#注意,该包只能在pysolar的Python 3.4环境中实现。solar import * import datetime # define the location (Beijing, China) lat, lon = 39.9075, 116.39723 #生成太阳辐射的时间序列数据集start = datetime。datetime(2018, 1,1,8,0,0,0, 0,0, tzinfo=datetime.timezone.utc) solar_data = [] for i in range(0,24*90,1): # 24小时x 90天date = start + pd.to_timedelta(1,'H') altitude_deg = get_height (latat, lon, date) solar_data.append(辐射。get_radiation_direct(date, altitude_deg)) solar_ = pd.Dataframe([]) solar_['value] = solar_data #绘图##绘图之前,我发现有很多辐射大于10e5的极端值。我不知道它们出现的原因,以及如何根据条件删除这些数据。solar_.loc [solar_。值>5000,' Value '] = np。南plt.plot (solar_.value)

在这里输入图像描述

这个结果似乎不正确。我认为,太阳辐射应该呈现出明显的日变化规律,并具有季节异质性。

如何解释这些奇怪的结果呢?或者在没有监测设备的情况下,太阳辐射数据是否有更好的解决方案?

任何意见或建议都将不胜感激。

PS:我添加了同期海拔高度的结果来回应BarocliniCplusplus的评论在这里输入图像描述

\ endgroup美元
3.
  • 2
    \ begingroup美元 它看起来像一个割线函数的输出。我建议检查一下高度角度是否合理(比如打印出来)? \ endgroup美元
    - - - - - -BarocliniCplusplus
    2018年6月25日17:34
  • \ begingroup美元 我几乎从未用Python做过任何事情,所以这可能是完全错误的……但是注意到date不使用I是奇怪的(可能pd因为循环而被假设迭代!????),也想知道['value]在solar_['value]行中做什么(可能是从数组或其他类似的东西中制作列表,但会认为您想要索引而不是值??)不管怎样,可能是无用的输入,但想法(为什么不呢,回复这么少)。也许在循环/尝试重新格式化到图形包之前只打印一个值,以确保问题不在两者之间? \ endgroup美元
    - - - - - -JeopardyTempest
    2018年6月26日10:21
  • 1
    \ begingroup美元 @BarocliniCplusplus,感谢您的回复,抱歉回复晚了。我会上传高度度数据作为补充信息。 \ endgroup美元
    - - - - - -汉Zhengzu
    2018年6月26日10:29

1回答1

7
\ begingroup美元

看看pysolar文档(http://pysolar.readthedocs.io/en/latest/)下的“晴空辐射估算”。该算法不会在晚上返回零,而是直接将这些数字插入,给出无意义的值。过滤结果,以便ifaltitude_deg< 0,辐射为0。一个只使用pysolar, datetime和pyplot(我不使用pandas,所以我不能评论它)和列表的例子如下:

导入datetime Import matplotlib。pyplot plt进口pysolar lat,朗= 39.9075,116.39723 #北京,中国时区= datetime.timezone (datetime.timedelta(小时= 8))# 0800 UTC开始= datetime.datetime(2018年,1,1,tzinfo =时区)# 2018年1月1 #计算辐射每小时90天nhr = 24 * 90日期,altitudes_deg,辐射=()列表,列表(),列表()《国际卫生条例》的范围(nhr):日期=开始+ datetime.timedelta(小时=国际卫生条例)altitude_deg = pysolar.solar.get_altitude(纬度、经度、日期)如果altitude_deg < = 0 = 0:辐射。else: radiation = pysolar.radiation.get_radiation_direct(date,altitude_deg) dates.append(date) altitude_deg .append(altitude_deg) radiation. append(radiation) days = [ihr/24 for ihr in range(nhr)] fig, axs = plt.subplots(nrows=2,ncols=1,sharex=True) axs[0].plot(days, altitude_deg) axs[0]. subplot (days, altitude_deg)set_title('太阳高度,度')axs[1].plot(天,辐射)axs[1]。set_title('太阳辐射,W/m2') axs[1]。set_xlabel('日期' +开始。strftime('%Y/%m/%d %H:% m UTC')) plt.show()

海拔与辐射图

\ endgroup美元

    你的答案

    点击“张贴您的答案”,即表示您同意我们的服务条款隐私政策而且饼干的政策

    这不是你想要的答案?浏览带标签的其他问题问自己的问题