Python 微波辐射计画图

先看效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原始数据

在这里插入图片描述

代码

有注释,这里就不再叙述,直接上代码

init



import util as util
import config as config
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文


def get_data_config(path):
    if str(path).find("LV1") >= 0:
        return config.data_dic.get("LV1")
    else:
        return config.data_dic.get("LV2")


def find_height_layer(data):
    """
    获得数据高度信息
    :param data:
    :return:
    """
    height_layer = []
    for i in data:
        height_layer.append(util.get_number(i))
    return height_layer


def find_type_data(data, data_type_number, column_localhost):
    """
    根据类型过滤一遍数据
    :param data:
    :param data_type_number:
    :return:
    """
    tmp_data = []
    time_data = []
    for i in data:
        if i[2] == data_type_number:
            tmp_data.append(i[column_localhost:])
            time_data.append(i[1][11:16])
    # .transpose() 矩阵xy翻转
    return np.array(tmp_data, dtype=float).transpose(), time_data


def figure(ynew, xnew, grid_data, unit, name, bar_lab, level, contour_level, fmt):
    """
    绘图
    :param ynew:高度
    :param xnew:时间
    :param grid_data: 数据
    :param unit: 单位
    :param name: 变量名称
    :param bar_lab: 色阶显示的标签值
    :param level:   色阶等级
    :return:
    """
    img = plt.figure()
    ax = img.add_subplot(111)
    # 色斑图
    p = plt.contourf(ynew, xnew, grid_data, levels=level, cmap='jet')
    # 等值线
    contour = plt.contour(ynew, xnew, grid_data, contour_level, colors='k', linewidths=0.3)
    plt.clabel(contour, fmt=fmt, fontsize=10, colors='k')
    cbar = plt.colorbar(p)
    # 设置色阶显示标签
    cbar.set_ticks(bar_lab)
    # 单位
    cbar.ax.set_title(unit)

    # 设置x轴刻度显示数量
    ax.set_xticks(ax.get_xticks()[::30])
    # 设置x轴显示标签
    ax.set_xticklabels(config.x_time)
    # 标签旋转90度
    plt.xticks(rotation=90)
    plt.xlabel("时间")
    plt.ylabel("高度(km)")
    plt.title(name)

    # plt.savefig(data_type_number + ".png", dpi=500)
    plt.show()


path = '/ZP2020-06-02_00-00-59LV2.csv'

data_type_number = config.data_type_number

data_config = get_data_config(path)
column_localhost = data_config.get("column_localhost")
height_layer_localhost = data_config.get("height_layer_localhost")
unit = data_config.get("data_type").get(data_type_number).get("unit")
name = data_config.get("data_type").get(data_type_number).get("name")
bar_lab = data_config.get("data_type").get(data_type_number).get("bar_lab")
color_level = data_config.get("data_type").get(data_type_number).get("color_level")
contour_level = data_config.get("data_type").get(data_type_number).get("contour_level")
fmt = data_config.get("data_type").get(data_type_number).get("fmt")

data_arr = util.red_csv(path)
height_layer = find_height_layer(data_arr[height_layer_localhost][column_localhost:])
tmp_data, time_data = find_type_data(data_arr, data_type_number, column_localhost)

figure(time_data, height_layer, tmp_data, unit, name, bar_lab, color_level, contour_level, fmt)

print(1)

util

import csv
import re


def get_number(str):
    pat = '\d+\.\d+|\d+\.|\.\d+|\.'
    number = re.findall(pat, str)[0]
    return float(number)


def red_csv(path):
    """
    读取数据
    :param path:
    :return:
    """
    data_arr = []
    with open(path, encoding='gbk')as f:
        f_csv = csv.reader(f, skipinitialspace=True)
        for row in f_csv:
            data_arr.append(row)
    return data_arr

config



import numpy as np

# data_type_number  数据类型
# column_localhost  多少列开始是通道(不同高度层)数据

data_type_number = "11"

data_dic = {
    "LV1": {"data_type": {"11": "大气辐射亮温", "21": "温、湿、压、红外、降雨"}, "column_localhost": 3, "height_layer_localhost": 1},
    "LV2": {
        "data_type": {
            "11": {"name": "温度廓线", "unit": "(℃)", "bar_lab": np.linspace(-50, 50, 6), "color_level": np.linspace(-50, 50, 500), "contour_level":[-40,-30,-20,-10,0,10,20],"fmt":'%.0f'},
            "12": {"name": "水汽浓度廓线", "unit": "(%)", "bar_lab": np.linspace(0, 15, 6), "color_level": np.linspace(0, 15, 500), "contour_level":[0.1,0.2,0.3,0.5,1,2,3,5,7,9,11,13,15],"fmt":'%.1f'},
            "13": {"name": "相对湿度廓线", "unit": "(%)", "bar_lab": np.linspace(0, 100, 6), "color_level": np.linspace(0, 100, 500), "contour_level":[20,30,40,50,60,70,80,90,100],"fmt":'%.0f'},
            "14": {"name": "液态水廓线", "unit": "(mm)", "bar_lab": np.linspace(0, 0.55, 6),"color_level": np.linspace(0, 0.55, 500), "contour_level":[0.1,0.2,0.3,0.4,0.5],"fmt":'%.1f'},
            "21": "卫星数据"},
        "column_localhost": 11, "height_layer_localhost": 0}
    }

x_time = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
          "19", "20", "21", "22", "23"]

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr . zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值