使用matplotlib对EC数据进行可视化探索

使用matplotlib绘制EC气压层面的等高线图及3D图像,首先安装matplotlib库和numpy库,这里略去安装步骤。

等高线图制作:

import matplotlib.pyplot as plt
import numpy as np


def height():
    f = open('ecpl_2018021500000_H_0200.txt', 'r')
    xfile = f.readlines()
    z = []
    for line in xfile:
        z.append(line)
    xsplit = []
    for item in z:
        xsplit.append(item.split())

    ndz = np.array(xsplit[::-1])

    return ndz

导入必需的库,读取气压等高度文件,这里的气压层数据文件为一个包含281*361个高度数据的文本文件,其包含10°S到60°N,60°E到150°E 200hP气压层的高度数据。

首先读取文件,并将数据整理成一个281*361的二维数组,由于matpoltlib的等高层图绘制只接受numpy.ndarray格式的数据,再将二维数组转换成后者的格式。

def contour():
    plt.figure()
    plt.title('ecpl 201802150000 200hpheight')
    plt.xlabel('longtitude(degree)')
    plt.ylabel('latitude(degree)')

    #nlon, nlat = coordinate()
    x = np.linspace(60, 150, 361)
    y = np.linspace(-10, 60, 281)
    X, Y = np.meshgrid(x, y)
    plt.contourf(X, Y, height(), 10, alpha=0.9, cmap=plt.get_cmap('winter'))
    Con = plt.contour(X, Y, height(), 10, colors='black')
    plt.clabel(Con, inline=True, fontsize=7)
    plt.show()


if __name__ == '__main__':
    contour()

plt.contourf用于创建等高线图底图,'10'表示等高线层数,alpha表示图像透明度,cmap用于控制配色方案

#matpoltlib库自带配色方案见matpoltlib-colormap

plt.contour和plt.clabel用于创建等高线和标线字,color定义等高线颜色,inline表示数字位于等高线内,fontsize控制字体大小。

生成效果图:

3D图制作:

3D图制作需要Axes3D库,直接安装mpl_toolkits即可

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np


def height():
    f = open('ecpl_2018021500000_H_0200.txt', 'r')
    xfile = f.readlines()
    z = []
    for line in xfile:
        z.append(line)
    xsplit = []
    for item in z:
        xsplit.append(item.split())

    nxsplit = []
    for lst in xsplit:
        nlst = []
        for item in lst:
            nitem = float(item)
            nlst.append(nitem)
        nxsplit.append(nlst)

    ndarray = np.array(nxsplit[::-1])

    return ndarray

依然是先读取txt文件并将数据转化为numpy.ndarray格式,这里要注意3D图制作要保证所有数据格式都为numpy.float64,如等高线图制作是直接使用numpy.str格式的数据会报错,所以这里在读取完数据后首先将其改为了float格式,再将二维数组转化为numpy.ndarray格式。

def tdaxes():
    fig = plt.figure()
    ax = Axes3D(fig)
    plt.title('ecpl 201802150000 200hpheight')
    plt.xlabel('longtitude(degree)')
    plt.ylabel('latitude(degree)')

    lon = np.linspace(60, 150, 361)
    lat = np.linspace(-10, 60, 281)
    Lon, Lat = np.meshgrid(lon, lat)
    H = height()

    #Z = np.array((Lon + Lat) / 2)
    #print(type(H), type(Z))
    #print(type(Z[0][0]), type(Lon[0][0]))

    ax.plot_surface(Lon, Lat, H, rstride=1, cstride=1, cmap=plt.cm.coolwarm)

    plt.show()


if __name__ == '__main__':
    tdaxes()

之后通过ax.plot_surface函数制作3D图,rstride和cstride表示在x、y轴方向的划分层数,cmap依然控制配色方案,最后画出的图如下:


阅读更多
个人分类: python 数据可视化
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭