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

关于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日

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存