在进行数据可视化时,对于一元函数
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
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)]
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]
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
plt.set_cmap(plt.get_cmap("seismic", 100))
im = ax.scatter(x, y, z, s=100,c=color,marker='.')
fig.colorbar(im, format=matplotlib.ticker.FuncFormatter(lambda x,pos:int(x*(max_v-min_v)+min_v)))
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
运行结果如下:
如上图所示,为了通过颜色表示各个点的值需要设定一个合理的值-点颜色映射关系。本文代码中使用"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中的内置色条。
通过设置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='.'
为设置点的形状(此处为实心圆点)。
根据数据的格式,我们需要设置侧边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))
使的clormap
和colorbar
具有同样的类型。
[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...