三维散点+颜色标记图

1. 问题

类似这样的图是怎么绘制的?
在这里插入图片描述

2. Python方案

刚好看到了:[Pyplot] 绘制三维散点图使用颜色表示数值大小
这篇文章有现成的画法,摘录过来备用(做了一定的优化)。

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,50) for i in range(0,20)]
y = [random.randint(0,50) for i in range(0,20)]
z = [random.randint(0,50) for i in range(0,20)]
v = [(x[i]+y[i])*z[i] for i in range(0,20)]
# 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", 20)(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')
ax.view_init(
                # elev=30,    # 仰角
             azim=225    # 方位角
            )
# 设置colormap,与上面提到的类似,使用"seismic"类型的colormap,共100个级别
plt.set_cmap(plt.get_cmap("seismic", 20))
# 绘制三维散点,各个点颜色使用color列表中的值,形状为"."
im = ax.scatter(x, y, z,s=200,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()

结果如图所示:
在这里插入图片描述
注意:使用的matplotlib包版本为3.5

3. Matlab 方案

% sets=geneParasets();
load paraselect-cold2;
% mea = mea * 100000000;

base = -5:-1;
index = 1;
for i = 1:size(base, 2)
    for j = 1:size(base, 2)
        for k = 1:size(base, 2)
            x = base(i);
            y = base(j);
            z = base(k);
            c = mea(index,1);
            
%             fprintf("%.4f     %.4f      %.4f===       %.4f \n",x,y,z,c);
            scatter3(x, y, z,50,c,'filled');
            hold on;
            index = index+1;
        end
    end
end

title('测试');
xlabel('X');ylabel('Y');zlabel('Z');
colormap summer;
colorbar;

% 
% function sets = geneParasets()
%     sets = [];
%     base = [10e-5,10e-4,10e-3,10e-2,10e-1];
%     for i = 1:size(base, 2)
%         for j = 1:size(base, 2)
%             for k = 1:size(base, 2)
%                 once = [base(i), base(j), base(k)];
%                 sets = [sets; once];
%             end
%         end
%     end
% end

在这里插入图片描述

### 使用Python绘制三维 在Python中,`Matplotlib`库提供了强大的绘功能,包括三维的绘制。通过导入`mpl_toolkits.mplot3d`工具包,可以创建三维表。以下是实现三维的关键步骤和示例代码。 #### 1. 导入必要的库 为了绘制三维,需要导入`numpy`用于生成数据,以及`matplotlib.pyplot`用于绘。同时,从`mpl_toolkits.mplot3d`中导入`Axes3D`或使用`projection='3d'`来创建三维坐标轴[^1]。 ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D ``` #### 2. 创建随机数据集 生成一组随机数据作为的输入。例如,使用`numpy.random.randint`或`numpy.random.rand`生成`x`、`y`、`z`坐标值。 ```python np.random.seed(0) # 设置随机种子以确保结果可重复 x = np.random.rand(50) # 随机生成50个介于0到1之间的数 y = np.random.rand(50) z = np.random.rand(50) ``` #### 3. 创建三维形对象 通过`plt.figure()`创建一个形对象,并使用`add_subplot`方法添加一个具有三维投影的子。可以通过设置`projection='3d'`来启用三维模式[^3]。 ```python fig = plt.figure(figsize=(8, 6)) # 创建形对象并设置大小 ax = fig.add_subplot(111, projection='3d') # 添加一个三维 ``` #### 4. 绘制 使用`ax.scatter`方法绘制三维。可以通过参数调整颜色、大小和标记样式。 ```python ax.scatter(x, y, z, c='red', marker='o', s=50) # 绘制 ``` #### 5. 设置形属性 为三维添加标题和轴标签,以便更清晰地展示数据信息。 ```python ax.set_title("3D Scatter Plot", fontsize=16) # 设置标题 ax.set_xlabel("X Axis", fontsize=12) # 设置X轴标签 ax.set_ylabel("Y Axis", fontsize=12) # 设置Y轴标签 ax.set_zlabel("Z Axis", fontsize=12) # 设置Z轴标签 ``` #### 6. 显示形 最后,调用`plt.show()`显示生成的三维。 ```python plt.show() ``` 完整代码如下: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 生成随机数据 np.random.seed(0) x = np.random.rand(50) y = np.random.rand(50) z = np.random.rand(50) # 创建形对象 fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') # 绘制 ax.scatter(x, y, z, c='red', marker='o', s=50) # 设置形属性 ax.set_title("3D Scatter Plot", fontsize=16) ax.set_xlabel("X Axis", fontsize=12) ax.set_ylabel("Y Axis", fontsize=12) ax.set_zlabel("Z Axis", fontsize=12) # 显示形 plt.show() ``` 此代码将生成一个包含50个随机三维颜色为红色,形状为圆形[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值