如何在 matplotlib 中为 3D 散点图上的数据点着色
How to colour data points on a 3D scatterplot in matplotlib
编辑:我设法弄清楚发生了什么。 Scatter 有一个参数 'line-width' (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()
你必须像这里一样绘制:
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()
编辑:我设法弄清楚发生了什么。 Scatter 有一个参数 'line-width' (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()
你必须像这里一样绘制:
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()