添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
安静的松鼠  ·  mysql ...·  1 年前    · 

在进行数据可视化时,对于一元函数 f(x)=y 数据我们可以使用二维平面图显示,x轴表示自变量,y轴表示函数值;对于二元函数 f(x,y)=z 数据我们也可以使用三维图可视化,x和y轴表示自变量,z轴表示函数值。由于显示设备的局限性,对于三元函数 f(x,y,z)=v 数据无法通过增加坐标轴的方式可视化,一个可行的方法是使用x、y和z轴表示自变量,使用数据点的颜色表示函数值。如下图所示:
三维散点图实例
本文实现了如上图所示的三维散点图,颜色表示数值大小,并增加了可以自定义范围的侧边colorbar。
文章第二部分为实现代码及部分注释,第三部分为对部分代码的详细解释,第四部分为参考的文章链接。

import matplotlib.colors 
import matplotlib.ticker
import matplotlib.pyplot as plt
import random
# 1.0 初始化数据
# f(x,y,z) = v
# 其中x,y,z为随机数,v=x*y*z
x = [random.randint(0,100) for i in range(0,100)]
y = [random.randint(0,100) for i in range(0,100)]
z = [random.randint(0,100) for i in range(0,100)]
v = [x[i]*y[i]*z[i] for i in range(0,100)]
# 1.1 根据各个点的值(v[]),设置点的颜色值,每个点的颜色使用一个rgb三维的元组表示,例如,若想让点显示为红色,则颜色值为(1.0,0,0)
# 设置各个点的颜色
# 每个点的颜色值按照colormap("seismic",100)进行设计,其中colormap类型为"seismic",共分为100个级别(level)
min_v = min(v)
max_v = max(v)
color = [plt.get_cmap("seismic", 100)(int(float(i-min_v)/(max_v-min_v)*100)) for i in v]
# 2.0 显示三维散点图
# 新建一个figure()
fig = plt.figure()
# 在figure()中增加一个subplot,并且返回axes
ax = fig.add_subplot(111,projection='3d')
# 设置colormap,与上面提到的类似,使用"seismic"类型的colormap,共100个级别
plt.set_cmap(plt.get_cmap("seismic", 100))
# 绘制三维散点,各个点颜色使用color列表中的值,形状为"."
im = ax.scatter(x, y, z, s=100,c=color,marker='.')
# 2.1 增加侧边colorbar
# 设置侧边colorbar,colorbar上显示的值使用lambda方程设置
fig.colorbar(im, format=matplotlib.ticker.FuncFormatter(lambda x,pos:int(x*(max_v-min_v)+min_v)))
# 2.2 增加坐标轴标签
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# 2.3显示
plt.show()

运行结果如下:
在这里插入图片描述

三、部分代码解释

1. colormap(颜色)映射设置。

如上图所示,为了通过颜色表示各个点的值需要设定一个合理的值-点颜色映射关系。本文代码中使用"seismic"colormap,同时设置colormap分为100个level。对应代码为:

color = [plt.get_cmap("seismic", 100)(int(float(i-min_v)/(max_v-min_v)*100)) for i in v]

在代码中plt.get_cmap("seismic",100)会得到一个colormap对象,然后使用plt.get_cmap("seismic",100)(x)可以得到对应x级别的颜色代码值。例如:

a = plt.get_cmap("seismic",100)(0)
b = plt.get_cmap("seismic",100)(100)
print("a:", a)
print("b:", b)

输出结果为:

a: (0.0, 0.0, 0.3, 1.0)
b: (0.5, 0.0, 0.0, 1.0)

表示级别0对应的(r,g,b,alpha)颜色值为(0.0, 0.0, 0.3, 1.0),级别100对应的颜色值为(0.5, 0.0, 0.0, 1.0)
如果需要使用其他类型的colormap,可以通过设置colormap名得到不同的效果,详细参考博客
python matplotlib自定义colorbar颜色条-以及matplotlib中的内置色条

2. 设置三维散点格式

通过设置plot格式:

ax = fig.add_subplot(111,projection='3d')

再使用scatter()函数绘制三维散点图:

im = ax.scatter(x, y, z, s=100,c=color,marker='.')

其中s=100为设置点的大小、c=color为设置点的颜色,marker='.'为设置点的形状(此处为实心圆点)。

3. 设置侧边colorbar

根据数据的格式,我们需要设置侧边colorbar显示的数值范围,例如,本例中最小值为825,最大值为784179。代码中使用lambda表达式计算显示的值,默认显示的值为[0,1],因此需要使用lambda公式将显示的值调整到[825,784179]。代码如下:

fig.colorbar(im, format=matplotlib.ticker.FuncFormatter(lambda x,pos:int(x*(max_v-min_v)+min_v)))

另外为了使点的颜色与colorbar颜色对应,需要使用

plt.set_cmap(plt.get_cmap("seismic", 100))

使的clormapcolorbar具有同样的类型。

[1]. MATLAB scatter 画二维/三维散点图时 用颜色表示数值大小 colorbar
[2]. 三维散点图加colorbar
[3]. 【python图像处理】彩色映射
[4]. matplotlib的colorbar自定义刻度范围
[5]. Python中lambda的使用

【plt】通过坐标映射的方式来实现对三维绘图的支持,这一点在讲解坐标投影时已经提到过了,故而可以在三维空间绘制曲线。事实上,如果不考虑表现力的话,几乎所有可以在二维空间绘制的图像,都可以映射到三维空间,而其表现力最强的则属散点图。 1、资源内容:基于Matlab绘制三维散点图(源码+数据).rar 2、适用人群:计算机,电子信息工程、数学等专业的学习者,作为“参考资料”参考学习使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具进行解压,没有解压工具的自行百度下载即可。 4、免责声明:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。 前几天用matlab画图时组长要求要用不同的颜色大小区分数据大小—— 看了matlab的官方文档很久也没有找到自己想要的答案,反复试验目录一、二维散点图方法一:直接点击绘图工具栏绘图,但不能更改图例颜色方法二:手动输入代码绘图,可控制颜色二、三维散点图 一、二维散点图 方法一:直接点击绘图工具栏绘图,但不能更改图例颜色 1、按顺序选三个变量,分别是你的X轴、Y轴和value 2、点击上方... 本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程用到的ai工具。 fig = plt.figure(figsize = (10,6)) ax1 = fig.add_subplot(2,1,1) color = dict(boxes='DarkGreen', whiskers='Dar... 绘图——颜色#八种内件颜色缩写#b:blue g:green r:red c:cyan m:magenta y:yellow k:black w:whiteimport numpy as npimport pandas as pdimport matplotlib.pyplot as plty=np.arange(1,5)plt.plot(y,color='g')plt... import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as np#bbb=[1 if (i =1.5) else 0 for i in Ddef fun(x, y):value= x**2+y**2return valuefig1 = plt.figure()ax = Axes3D(f... from Tkinter import *import tkFontimport timeimport ctypesimport serialimport _winregimport win32guiimport win32conimport win32apiimport wmidef get_reg(name, reg_path):registry_key = _winreg.OpenKey(_... 本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程用到的ai工具。 plt.plot()的使用,简单例子 X = np.linspace(1, 20, 10) #[1 3 5 7 9 11 13 15 17 19] [2 4 6 8 10 12 14 16 18 20] Y = np.sin(X) plt.plot(X, Y, color = "blue", linewidth=2, linestyle="-", label="LINE") plt.legend(loc="upper right") plt.show() X: x轴的长度,1-20取1 colors = ['#F0F8FF','#FAEBD7','#00FFFF','#7FFFD4','#F0FFFF','#F5F5DC','#FFE4C4', '#000000','#FFEBCD','#0000FF','#8A2BE2','#A52A2A','#DEB887','#5F9EA0', '#7FFF00','#D2691E','#FF7F50','#6495ED','#FFF8DC','#DC143C','#00FFFF', 在机器学习,经常需要查看原始数据的分布情况,从而对特征和算法的选择提供一个初始的intuition,通常来说,散点图是最为合适的。 散点图可以形象展示直角坐标系两个变量之间的关系。在散点图 ,每个数据点的位置实际上就是两个变量的值。变量间的任何关系都可以拿散点图表示matplotlib绘图功能模仿MATLAB,功能非常方便和强大。 下面,本文将详细介绍如何使用matplotl...