如何在matplotlib

时间:2016-07-17 21:00:11

标签: python matplotlib 3d mplot3d

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

我想生成一个数据点的三维散点图,根据它们的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

1 个答案:

答案 0 :(得分:2)

你必须像这里一样:

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