当前位置:   article > 正文

python绘制三维地形shade()参数_Python数据可视化笔记04--雷达图、三维图实战

三维地形可视化

Python数据可视化笔记01--Matplotlib基础

Python数据可视化笔记02--折线图、散点图实战

Python数据可视化笔记03--柱状图、饼状图实战

本文索引:

雷达图

三维图

本文环境:Windows10 + jupyter notebook

一、雷达图

【雷达图】

4903e85ac9931c25e69f2a9ad17a4353.png

雷达图(Radar Chart),又可称为戴布拉图、蜘蛛网图(Spider Chart),可以很好刻画出某些指标的横向或纵向的对比关系。

雷达图经常用于对多项指标的全面分析。比如:HR想要对比两个应聘者的综合素质,用雷达图分别画出来,就可以进行直观的比较。

python中用matplotlib模块绘制雷达图需要用到极坐标系。

【雷达图之极坐标系】

51909bfee7e6e08f9c091425ec087fb8.png

在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),

8218e636fdd9cd738e9ed8e984b6565a.png表示从Ox到OM的角度,ρ叫做点M的极径,

8218e636fdd9cd738e9ed8e984b6565a.png叫做点M的极角,有序数对(ρ,

8218e636fdd9cd738e9ed8e984b6565a.png)就叫做点M的极坐标,这样建立的坐标系叫做极坐标系。

通常情况下,M的极径坐标单位为1(长度单位),极角坐标单位为°。

【雷达图之polar()函数】

polar(theta,r,**kwargs)

主要参数:

theta:指极角

8218e636fdd9cd738e9ed8e984b6565a.png

r:指极径。

import numpy as np

import matplotlib.pyplot as plt

plt.polar(0.25*np.pi,20,'ro',lw=2)

plt.ylim(0,50) # 设置极轴的上下限

plt.show()

bef891c4c8a4758890ee74448edda3dd.png

这里:

0.25*np.pi = 45°:极角

20:极径

‘ro’:绘极坐标形状为红色圆点

lw = 2:极坐标图形宽度为2

如果绘制多个极角和极轴时:

import numpy as np

import matplotlib.pyplot as plt

theta = np.array([0.25,0.5,0.75,1,1.25,1.5,1.75,2])

r = [75,60,50,70,50,85,45,70]

plt.polar(theta*np.pi,r,'ro',lw = 2)

plt.ylim(0,100)

plt.show()

77b0425baed380ad4fe2eebab2a5f231.png

theta:定义了一个ndarray数组存储多个数据

r:定义了一个数组存放极轴的长度,也叫极径

则在途中绘制出多个点(0.25*π,75),(0.5*π,60),(0.75*π,50),(1.0*π,70)等。

绘制完极坐标点后,把每个点用线连起来,就是雷达图了。

只需要把图形绘制样式修改为‘ro-’即可,'ro-'中'-'表示极坐标点之间的连线。

此时得到图形是这样的:

980d7fa5849cdcb9a1e46097a1b2e3aa.png

但是此时曲线并未闭合?

闭合曲线:多构造一个极坐标点,和第一个点重叠

import numpy as np

import matplotlib.pyplot as plt

theta = np.array([0.25,0.5,0.75,1,1.25,1.5,1.75,2,0.25])

r = [75,60,50,70,50,85,45,70,75]

plt.polar(theta*np.pi,r,'ro-',lw = 2)

plt.ylim(0,100)

plt.show()

运行结果:

788ec11c36dc956e2c872bbe384a7bb6.png

fill()函数填充雷达图

import numpy as np

import matplotlib.pyplot as plt

theta = np.array([0.25,0.5,0.75,1,1.25,1.5,1.75,2,0.25])

r = [75,60,50,70,50,85,45,70,75]

plt.polar(theta*np.pi,r,'ro-',lw = 2)

plt.fill(theta*np.pi,r,facecolor='r',alpha=0.25) # 填充

plt.ylim(0,100)

plt.show()

运行结果:

5219f9013b5cfa4f576e8cecd39097df.png

二、三维图

【三维图概述】

matplotlib支持一些基础的三维图表绘制,比如曲面图、散点图和柱状图,需要使用mpl_toolkits模块。

如果要绘制三维图形,首先需要使用以下的语句导入相应的对象:

from mpl_toolkits.mplot3d import Axes3D

然后使用下面的两种方式之一声明要创建三维图:

ax = fig.gca(projection = '3d')

ax = plt.subplot(111,projection = '3d')

接下来就可以使用ax的plot()方法绘制三维曲线、plot_surface()方法绘制三维曲面、scatter()方法绘制三维散点图或bar3d()方法绘制三维柱状图了。

【 三维曲面绘制方法:p3d.Axes3D.plot_surface() 】

在绘制三维图形时,至少需要指定x、y三个坐标轴的数据,然后再根据不同的图形指定额外的参数设置图形的属性。

plot_surface(X,Y,Z,*args,**kwargs)

常用参数:

rstride和cstride分别控制x和y两个方向的步长,这决定了曲面上每个面片的大小;

color用来指定面片的颜色;

cmap用来指定面片的颜色映射表。

【三维散点图绘制方法:p3d.Axes3D.scatter() 】

p3d.Axes3D.scatter(xs,ys,zs = 0,zdir = 'z',s = 20,c = None,depthshade = True,

*args,**kwargs)

常用参数:

xs、ys、zs分别用来指定散点符号的x、y、z坐标,如果同时为标量则指定一个三点符号的坐标,如果同时为等长数组则指定一系列散点符号的坐标。

s用来指定散点符号的大小,可以是标量或与xs等长的数组;

【三维柱状图绘制方法:p3d.Axes3D.bar3d()】

p3d.Axes3D.bar3d(x,y,z,dx,dy,dz,color = None,zsort = 'average',*args,**kwargs)

常用参数:

x、y、z分别用来指定每个柱底面的坐标,如果这三个参数都是标量则指定一个柱的地面坐标,如果是三个等长的数组则指定多个柱的底面坐标;

dx、dy、dz分别用来是定柱在三个坐标轴上的跨度,即x方向的宽度,y方向的厚度和z方向的高度;

color用来指定柱的表面颜色。

三维曲线图实战:根据测试数据x、y、z,然后绘制三维曲线,并设置图例字号

import numpy as np

import matplotlib as mpl

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()

ax = fig.gca(projection = '3d')

#测试数据

theta = np.linspace(-4*np.pi,4*np.pi,100)

z = np.linspace(-4,4,100)*0.3

r = z**4 + 1

x = r*np.sin(theta)

y = r*np.cos(theta)

ax.plot(x,y,z,'b^-',label = '3D Picture Test')

mpl.rcParams['legend.fontsize'] = 10

ax.legend()

plt.show()

0c5f566ba2dbe1f0a5fd5560a445dca3.png

三维柱状图实战:生成测试数据,绘制三维柱状图,设置每个柱的颜色随机

import numpy as np

import matplotlib.pyplot as plt

import mpl_toolkits.mplot3d

x = np.random.randint(0,40,10)

y = np.random.randint(0,40,10)

z = 80*abs(np.sin(x + y))

ax = plt.subplot(projection = '3d')

for xx,yy,zz in zip(x,y,z):

color = np.random.random(3)

ax.bar3d(xx,yy,0,dx = 1,dy = 1,dz = zz,color = color)

ax.set_xlabel('X')

ax.set_xlabel('Y')

ax.set_xlabel('Z')

plt.show()

3769ec0e2173994c8c12f7daa8ab3a93.png

Python数据可视化部分四个小节已全部更新完毕,神知道我是在被隔离期间完成这最后一篇的笔记的,接下来要开始机器学习部分的实战啦,大家一起加油,武汉加油,中国加油!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/612616
推荐阅读
相关标签
  

闽ICP备14008679号