月下梧桐~ 2023-01-02 22:53 采纳率: 81.8%
浏览 120
已结题

关于python中matplotlib绘制等高图的问题

用matplotlib的plt.contour(x,y,z,8,colors='black')绘制等高图,其高度值z得是二维数组,但我手里高度值只是一组列表,要怎样才能绘制出等高图呢?

代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#数据准备
x=[100,200,300,400,500]  #横坐标
y=[300,500,100,200,500]  #纵坐标
z=[100,120,110,150,180]  #高度值,运行时这里出错,提示“Input z must be 2D, not 1D”,
                         #问题是如何转换成二维数组?????

'''添加标题'''
plt.title(f"测试", fontsize=20, fontname="SimHei")   #"SimHei"黑体字体可确保中文正常显示

'''contour()函数可生成三维结构表面的等值线图'''
C = plt.contour(x,y,z,8,colors='black')

'''cmap=plt.cm.hot为等值线添加过渡色'''
plt.contour(x,y,z,8,cmap=plt.cm.hot)

'''等值线间添加过渡色'''
plt.contourf(x,y,z, 8)

'''colorbar()可在右侧显示颜色值'''
plt.colorbar()

'''clabel用于标记等高线'''
plt.clabel(C,inline=1,fontsize=10)

plt.show()

  • 写回答

6条回答 默认 最新

  • |__WhoAmI__| 2023-01-02 23:02
    关注

    可以将高度值 z 转换成二维数组的形式,然后再使用 plt.contour 函数绘制等高图。

    比如,可以使用 numpy.meshgrid 函数将横坐标和纵坐标列表转换成网格坐标矩阵,然后将这两个网格坐标矩阵广播相乘得到一个矩形网格坐标矩阵,再将高度值列表转换成与网格坐标矩阵大小相同的矩阵,最后将矩阵传入 plt.contour 函数即可。

    import numpy as np
    import matplotlib.pyplot as plt
    
    # 数据准备
    x = [100, 200, 300, 400, 500]  # 横坐标
    y = [300, 500, 100, 200, 500]  # 纵坐标
    z = [100, 120, 110, 150, 180]  # 高度值
    
    # 将横坐标和纵坐标列表转换成网格坐标矩阵
    xx, yy = np.meshgrid(x, y)
    
    # 将高度值列表转换成与网格坐标矩阵大小相同的矩阵
    zz = np.array(z).reshape(xx.shape)
    
    # 绘制等高图
    C = plt.contour(xx, yy, zz, 8, colors='black')
    
    # 添加标题
    plt.title(f"测试", fontsize=20, fontname="SimHei")   # "SimHei"黑体字体可确保中文正常显示
    
    # 等值线间添加过渡色
    plt.contourf(xx, yy, zz, 8)
    
    # colorbar()可在右侧显示颜色值
    plt.colorbar()
    
    # clabel用于标记等高线
    plt.clabel(C,inline=1,fontsize=10)
    
    plt.show()
    

    仅供参考,望采纳,谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 修改了问题 1月2日
  • 创建了问题 1月2日

悬赏问题

  • ¥500 高有偿提问!求优化设计微信小程序
  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据