资讯专栏INFORMATION COLUMN

python做图基本之plt.contour案例详细说明

89542767 / 1251人阅读

  contour和contourf全是画三维立体等高线图的,接下来本文主要是为大家介绍了关于python做图基本操作之plt.contour的相关信息,原文中依据案例编码推荐的十分详尽,需用的小伙伴可以参考一下


  序言


  plt.contour是python中用以画等值线的函数公式,这儿简单的介绍plt.contour的应用。


  应用示例


  import numpy as np
  import matplotlib.pyplot as plt
  x=np.linspace(-3,3,50)#生成连续数据
  y=np.linspace(-3,3,50)#生成连续数据
  X,Y=np.meshgrid(x,y)


  画出来的效果就是:

01.png

  #生成能够在坐标系中形成点阵的数组,这个可以去参考一下别的文章


  #https://lixiaoqian.blog.csdn.net/article/details/81532855这里讲的比较详细


  Z=X**2+Y**2#这里将高度设置为x^2+y^2,就能画一个圆形的等高线


  C=plt.contour(x,y,Z,[2,5,8,10])#画等高线#使用plt.contour(X,Y,Z,[2,5,8,10])也是没问题的


  plt.clabel(C,inline=True,fontsize=10)


  plt.contour()函数公式本身


  plt.contour(X,Y,Z,[levels],**kwargs)


  plt就是matplotlib.pyplot


  X,Y表示是经纬坐标(这里就是可供选择的,但如果不传到的话那就是python依据传到相对高度字符数组(Z)大小一键生成的座标),通常许多会用字符数组,但实际上二维数组也是可以的


  Z意味着每一个座标相对应的相对高度值,是个字符数组,在其中每一个值表示是每一个座标相对应的相对高度XYZ的具体数据信息组成可以参考上边的事例,在当地查询一下信息是长什么样子


  levels主要有两种传到方式。一种传到一个整数,这一整数金额表明你要制作的等值线的数量,可是显示结果很有可能并不一定是和传到的整数金额的数量同样,是大概一样的数量(很有可能相距一两条)(怎么是大概数量呢?很有可能是python替你默认设置产生的较为适宜的好多个等值线吧)。还有种方法就是传到1个包括相对高度值的二维数组,那样python便会画出传到相对高度值相对应的等值线。


  其余主要参数cmap,linewidths,linestyles等这里不多阐述了


  plt.contour()图片中的座标

02.png

  因为刚开始这儿很搞混,因而在这儿对座标所代表的信息进行1个表述。要解释这种情况,最先能够引进现实问题,例如一条路,通常情况下从飞机或是非常高的地区观查那座山得话能看见那座山如同圆同样,假如抽象化成平面图的话那就成为解开了(这里就是指较为整齐的山啊)。随后事实上等值线也是从那样非常高的地方想象中的,通过各种专用工具把同样相对高度部位在这个平面内标明出去,同样相对高度部位依据线连在一起就会形成等值线。


  如果将刚讲的圆放到平面坐标中,那样某一座标(x,y)则表示所看到的那座山在平面图角度来说所展现出的部位,如下图所示:


  左侧假定是一条路,上边的红色的点在平面图角度来看便成为平面坐标里的一个部位,这时相对高度早就在等高线图中体现不出来了,这也就是为什么等值线的图片需用标明相对高度值。


  这儿融合立体图来说也会更加形象化:将上边的圆形等高线图相对高度用三维模型呈现出来,应用编码为:


  from matplotlib import pyplot as plt
  from mpl_toolkits.mplot3d import Axes3D
  import numpy as np
  x=np.linspace(-3,3,50)
  y=np.linspace(-3,3,50)
  X,Y=np.meshgrid(x,y)
  Z=X**2+Y**2
  C=plt.contour(x,y,Z,[2,5,8,10])
  plt.clabel(C,inline=True,fontsize=10)
  fig=plt.figure()
  fig=plt.figure(figsize=(10,10))
  ax1=plt.axes(projection='3d')
  ax1.scatter3D(X,Y,z,cmap='Blues')


  图上X,Y,Z都全部被变换为了能三维坐标系里的座标,形成了一种类似球型的部分高度图。Z轴便是每一个点相对应的相对高度值,这儿设想如果将一整张图从顶部抛向到xy二维动画平面坐标中,假如取逐渐某好多个固定不动相对高度值(如2,5,8),那这好多个固定不动相对高度值对应的座标在二维动画平面坐标中连在一起得话就成为1条等值线。

03.png

  在这里可以多看看好多个事例:


  x=np.linspace(-3,3,50)
  y=np.linspace(-3,3,50)
  X,Y=np.meshgrid(x,y)
  z=(np.exp(-X**2-Y**2)-np.exp(-(X-1)**2-(Y-1)**2))*2
  fig=plt.figure()
  fig=plt.figure(figsize=(10,10))
  ax1=plt.axes(projection='3d')
  ax1.scatter3D(X,Y,z,cmap='Blues')
  效果:
  其二维图为:
  叮!
  不学不知道,学了才知道什么都不是想象的那么简单啊。
  补充:plt.contour等高线绘制
  import numpy as np
  import matplotlib.pyplot as plt
  def height(x,y):
  return(1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
  x=np.linspace(-3,3,300)
  y=np.linspace(-3,3,300)
  X,Y=np.meshgrid(x,y)
  #为等高线填充颜色10表示按照高度分成10层
  plt.contourf(X,Y,height(X,Y),10,alpha=0.75,cmap=plt.cm.hot)
  C=plt.contour(X,Y,height(X,Y),10,colors='black')
  #绘制等高线标签
  plt.clabel(C,inline=True,fontsize=10)
  #去掉坐标轴刻度
  #plt.xticks(())
  #plt.yticks(())
  plt.show()


  #显示图片

06.png

  综上所述,这篇文章就给大家介绍到这里了,希望可以给各位读者带来一定的帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128727.html

相关文章

  • 后端经验

    摘要:在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁入队服务教程在它提出十多年后的今天,已经成为最重要的应用技术之一。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。 JVM 源码分析之 Jstat 工具原理完全解读 http://click.aliyun.com/m/8315/ JVM 源码分析之 Jstat 工具原理完全解读 http:...

    i_garfileo 评论0 收藏0
  • 2018电影票房分析-谁才是票房

    摘要:另外由于豆瓣上一些电影评分数量太少而不显示,所以这里的电影数量会和票房数量有所差异。月度票房将类型片的票房按月划分,得到了这张图。 去年末的时候,我招收了新的 实训生 。本文是其中一位 @齐大圣 同学在实训两个月时完成的项目案例。(码上行动群里同学应该都看过这个名字,现在也是助教之一。)项目最初的想法是, 从互联网上的公开信息中采集2018年在国内上映电影的票房、评分、类型、演员等信息...

    stormjun 评论0 收藏0
  • Segmentfault的热门标签,可视化展示?

    摘要:结论居首位,紧随其后,位列第三。数据库方面问题最多的还是。在各种技术名词的标签下,还冒出一个程序员标签,排名第位。 结论 JavaScript居首位,HTML5紧随其后,Python位列第三。 注:数据来源于569页标签页面的11,380 条记录 showImg(https://segmentfault.com/img/bVXMRf?w=1178&h=548);showImg(http...

    rottengeek 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<