python - 如何在 matplotlib 中为 3D 散点图上的数据点着色

标签 python matplotlib 3d mplot3d

编辑:我设法弄清楚发生了什么事。散点图有一个参数“线宽”(lw=n),用于确定散点图绘图点周围线条的粗细。因为我的绘图点尺寸为 1 (s=1),所以线条宽度太粗,实际上覆盖了绘图点的颜色。将线宽设置为 0 (lw=0) 的厚度应该可以解决问题。

我想生成数据点的 3D 散点图,根据 y 坐标的值对它们进行着色,但我无法设法让这些点实际着色。

如果数据点的值较低,则颜色应更接近色谱的蓝色端。如果该值较高,则颜色应更接近光谱的红端。

我已经成功地以 2D 形式绘制了我想要的内容,但在以 3D 形式复制该过程时遇到了困难。当前代码仅将点绘制为黑色。

这是我的 3D 尝试代码,以及 2D 所需结果的屏幕截图。我到底做错了什么?

x_points、y_points 和 z_points 是浮点值列表。

import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

def three_dimensional_scatterplot(
    self, x_points, y_points, z_points, data_file
):

    cm1 = cm.get_cmap('gist_rainbow')

    fig = plt1.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(
        x_points,
        y_points,
        z_points,
        s=1,
        c=y_points,
        cmap=cm1
    )

    ax.set_xlabel('X axis')
    plt1.show()

enter image description here

最佳答案

你必须像这样绘制:

import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

x = np.random.rand(25)
y = np.random.rand(25)
z = np.random.rand(25)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
p3d = ax.scatter(x, y, z, s=30, c=y, cmap = cm.coolwarm)
plt.show()

enter image description here

关于python - 如何在 matplotlib 中为 3D 散点图上的数据点着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38425883/

相关文章:

python - 创建具有相同自相关的排列

当我尝试运行文件时 Pythonw 崩溃

ios - SCNHitResult-画线到击中点

testing - 用于评估计算机视觉算法的仿真和合成视频生成

python - Matplotlib 无法识别属性 set_xdata。

android - 如何拦截 Android OpenGL ES 中的触摸屏事件?

python - 如何计算 pygame.Surface 的屏幕中间?

python - 从多个索引 Pandas 的 DataFrame 访问值

python - 二维绘图堆栈

python - 在python中分隔箱线图组的垂直线