爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13012|回复: 0

[求助] python 等值线太密集

[复制链接]

新浪微博达人勋

发表于 2018-6-28 15:45:39 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 TK_LSP 于 2019-10-14 13:25 编辑

win10系统
python3.6
数据:全球等压数据,精度:经纬度1°
使用matplotlib做图,理想很美好,现实是把杀猪刀
2.jpg
理想图
1.jpg

现实图
3.jpg
图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()

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表