在 matplotlib 散点图中使用颜色表示 4 维点的正确方法

Alb*_*con 0 python matplotlib

我目前正在尝试使用散点图来表示3D空间中的一组 4 维点matplotlib。为此,我将 4 维表示为3D点的颜色。

据此,我想打印彩色点。因此,该点的颜色取决于该点的第四个分量。

我想使用光谱颜色图。我已经成功了,但是使用了灰度,这种表示对我来说还不够。

我真的需要使用光谱颜色图。所以下面的代码是我在此处询问之前的最后一次尝试:

inicioVertices=5
finalVertices=10
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
datos={}
for vertice in range(inicioVertices,finalVertices):
    print(vertice)
    for arista in range(vertice, vertice*(vertice-1)/2):
       for k in range(vertice//4,vertice+1):
           media=0.0
           for n in range(10):
               g=nx.dense_gnm_random_graph(vertice,arista)
               inicio=time.time()
               recubrimientoVertices(g,k)
               diferencia=time.time()-inicio
           media+=diferencia
           aux=media
           media=aux/10

           datos[(vertice,arista,k)]=media
           mMin=0.00054
           mMax=0.067

           normalizada=(media-mMin)/(mMax-mMin)
           cmap = cm.ScalarMappable( cmap = plt.get_cmap('spectral'))

           print(media)
           ax.scatter(vertice, arista, k, c= cmap.to_rgba(normalizada), marker='o',s=40)
print("max"+str(max(datos.values())))
print("min"+str(min(datos.values())))
ax.set_xlabel('Vertices')
ax.set_ylabel('Aristas')
ax.set_zlabel('K')
plt.show()
Run Code Online (Sandbox Code Playgroud)

media是第四个分量值,并且normalizada是该分量的标准化值,因此normalizada始终是 this 中的数字interval [0,1]。这是前面的代码返回的表示:

在此输入图像描述

如您所见,所有点均以黑色打印。我希望有人能帮助我解决这个问题,谢谢。

The*_*tor 5

只是绘制 3D 散点图并使用用户定义的颜色图的示例。

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

def scatter3d(x,y,z, cs, colorsMap='jet'):
    cm = plt.get_cmap(colorsMap)
    cNorm = matplotlib.colors.Normalize(vmin=min(cs), vmax=max(cs))
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)
    fig = plt.figure()
    ax = Axes3D(fig)
    ax.scatter(x, y, z, c=scalarMap.to_rgba(cs))
    scalarMap.set_array(cs)
    fig.colorbar(scalarMap,label='Test')
    plt.show()

x = np.random.uniform(0,1,50)
y = np.random.uniform(0,1,50)
z = np.random.uniform(0,1,50)
Run Code Online (Sandbox Code Playgroud)

例如,当我调用 scatter3d(x,y,z,x+y) 时,我得到以下内容作为x+y我的颜色图:

在此输入图像描述