- 积分
- 65
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-2-2
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 TK_LSP 于 2019-10-14 13:25 编辑
win10系统
python3.6
数据:全球等压数据,精度:经纬度1°
使用matplotlib做图,理想很美好,现实是把杀猪刀
理想图
现实图
图3
想学习下用Python的老师,如何做出图3的效果:等压线不密,全球能清晰看到气压等值线!想学习下用Python的老师,如何做出图3的效果:等压线不密,全球能清晰看到气压等值线!
想学习下用Python的老师,如何做出图3的效果:等压线不密,全球能清晰看到气压等值线!
重要的问题问三遍~
目前的代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def get_values(file_name):
"""功能是提取文件里的原始气压值,最后返回一个181*360的气压值矩阵,未进行插值"""
py_file_path = os.getcwd()
list_pressure = np.arange(934, 1062, 1)
gfs_file_path = py_file_path+'/'+file_name
json_file_path = py_file_path+'/pressure_test.json'
os.system('grib2json -d -n -o '+json_file_path+' '+gfs_file_path)
if os.path.exists(json_file_path):
with open(json_file_path, 'r')as json_f:
dict_json = json.load(json_f)
result = dict_json[0]['data']
cc = []
for i,v in enumerate(result,1):
v1 = round(v/100)
if v1>1062 or v1<934:
if v1>1062:
v2 = 128
else:
v2 = 0
else:
v2 = round((v1-934)/1)
value = list_pressure[v2]
cc.append(value)
c = np.array(cc).reshape(181,-1)
return c
def prepare_data(result):
"""生成x,y的数据"""
n1 = 360
n2 = 181
x = np.linspace(-179, 180, n1)
y = np.linspace(90, -90, n2)
X, Y = np.meshgrid(x, y)
# 填充等高线
# plt.contourf(X, Y, result, alpha = 0.6)
# 添加等高线
C = plt.contour(X, Y, result, linewidths=1.5)
plt.clabel(C, inline=True)
# 把x,y数据生成mesh网格状的数据,因为等高线的显示是在网格的基础上添加上高度值
# 显示图表
# plt.axis('off')
# plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.show()
def main():
result = get_values(file_name='gfs.t00z.pgrb2.1p00.f000')
prepare_data(result)
if __name__ == '__main__':
main()
|
|