TracyData1997 2023-03-09 10:07 采纳率: 0%
浏览 59

Python 三列数据绘制等高线图

我现在有个EXCEL表格,里面X,Y,Z 一共三列数据
我想利用这三列数据 绘制一个平面的 等高线填色图,我首先将X,Y,Z转化成pd.pivot_table透视表形式的网格然后画图,但是总是提示多了一行一列不知道什么情况

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
df1=pd.read_excel(读取文件的)
#usecols 读取指定列数据

x = df1[['x']].drop_duplicates()
y = df1[['y']].drop_duplicates()
X,Y = np.meshgrid(x.values,y.values)#将原始数据变成网格数据形式
print(X)
print(Y)

df2 = pd.pivot_table(df1,index='y', columns='x', values='abs_mag_pykrige').values
print(df2)
CS = plt.contourf(Y,X,df2,linewidth=2,cmap=mpl.cm.jet)#色带型:mp.coutourf(x, y, z, 线的数量, cmap=颜色映射)
plt.colorbar(CS)
plt.show()
#提示是:TypeError: Shape of x does not match that of z: found (122, 137) instead of (121, 136).
  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-03-09 10:11
    关注

    该回答引用ChatGPT

    这个错误提示是因为X和Y中的值数量和df2不一致,导致绘制等高线填色图失败。可能是因为在对X和Y进行网格化时出现了一些错误,多了一行一列。

    你可以尝试将 X 和 Y 的长度减 1,然后重新进行网格化操作,再进行绘图,示例如下:

    
    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib as mpl
    
    df1 = pd.read_excel(读取文件的)
    # usecols 读取指定列数据
    
    x = df1[['x']].drop_duplicates().values
    y = df1[['y']].drop_duplicates().values
    X, Y = np.meshgrid(x, y)  # 将原始数据变成网格数据形式
    X = X[:-1, :-1]
    Y = Y[:-1, :-1]
    
    df2 = pd.pivot_table(df1, index='y', columns='x', values='abs_mag_pykrige').values
    df2 = df2[:-1, :-1]
    
    CS = plt.contourf(X, Y, df2, linewidth=2, cmap=mpl.cm.jet)  # 色带型:mp.coutourf(x, y, z, 线的数量, cmap=颜色映射)
    plt.colorbar(CS)
    plt.show()
    
    

    这个示例中,我们将 X 和 Y 中的最后一行和最后一列都去掉了,然后再进行网格化操作。这样就可以避免多出一行一列的问题,从而成功绘制等高线填色图。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月9日

悬赏问题

  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题