使用excel三列数据绘制等高线图

 参数用于绘制等高线图并保存下来

map_x_data, map_y_data, map_z_data:绘制等高线图的三列数据

levels:等高线距元组或列表

start_x,start_y,end_x,end_y,step_x,step_y: x、y轴的最小值、最大值和步长

以我的理解,plt.contour就是将画布划分为若干个均匀分布的网格,按每个网格都代表的值绘制出等高线。

x_grid、y_grid生成长度为50的数组,使用np.meshgrid将他俩转变成坐标系上的每个点,X保存了网格上的所有点的x值,是一个二维数组,将x_grid按行复制,Y保存了网格上的所有y值,是一个二维数组,将x_grid按列复制。

使用rbf进行三次式拟合,这里kind还可以选择linear,quintic。看哪个效果好。将网格化的XY带入三次式func得到Z,也就是每个网格代表的值。带入到contour就可以绘制等高线了。

import matplotlib.pyplot as plt
from pylab import mpl
from matplotlib import cm
import numpy as np
import pandas as pd
import seaborn as sns
from scipy.interpolate import Rbf
def contour_f(map_x_data, map_y_data, map_z_data,levels,start_x,end_x,step_x, start_y, end_y, step_y,save_path):
    plt.clf()
    plt.figure(figsize=(16, 9))
    x_grid=np.linspace(map_x_data.min(),map_x_data.max(),50)
    y_grid=np.linspace(map_y_data.min(),map_y_data.max(),50)
    X, Y = np.meshgrid(x_grid, y_grid)
    func = Rbf(map_x_data, map_y_data, map_z_data, function='cubic')
    Z = func(X, Y)
    # 绘制图层
    cset = plt.contourf(X, Y, Z, cmap=plt.cm.jet)
    # 绘制等高线
    contour = plt.contour(X, Y, Z, colors='k',levels=levels)
    plt.clabel(contour, fontsize=20, colors='k')
    # 添加颜色条
    plt.colorbar(cset)
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    mpl.rcParams["axes.unicode_minus"] = False
    plt.title('title', fontsize=20)
    plt.xlabel('x', fontsize=15)
    plt.ylabel('y', fontsize=15)
    plt.xticks(np.arange(start_x,end_x,step_x))
    plt.yticks(np.arange(start_y, end_y, step_y))
    plt.savefig(save_path, bbox_inches='tight')
    plt.close()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值