font python matplotlib colors 3d scatter-plot

python - font - Colores perdidos en Matplotlib 3D scatter plot



plot title font size matplotlib (1)

En lugar de usar ax.plot(x,y, ''o'') intente ax.plot(x,y,''.'') O ax.plot(x,y,''*'' . La ''o'' especifica el marker para utilizar, y el marcador ''o'' es un círculo grande lleno, por lo que su trama se ve feo.

Para un proyecto, estoy haciendo algunas gráficas de dispersión 3D con las tres proyecciones correspondientes debajo de ella. Uso diferentes colores para indicar un cuarto parámetro. Primero trazo los datos con un cierto color y luego sobrepunto con otros datos con un color diferente, de modo que al final el orden es tal que puedo ver todo lo que quiero:

Al principio, funcionó bien, pero cuando trato de hacer lo mismo con datos ligeramente diferentes, los colores se arruinan. Los colores que se muestran en las proyecciones son los correctos, pero algunos de ellos faltan en el gráfico 3D por lo que ya no coinciden:

Cuando giro la trama 3D de una manera divertida, los colores se recuperan y puedo verlos como se suponía que eran:

Sin embargo, no quiero una trama 3D que se gire de una manera divertida, porque los ejes se ensucian y es imposible leerlos así.

Encontré una solución al problema aquí: trazar la dispersión 3d en matplotlib . Básicamente dice que debería reemplazar mi ax.scatter (X, Y) con ax.plot (X, Y, ''o''). Cuando hago esto, los colores se muestran de la manera en que se suponía que eran, pero la trama es mucho más complicada y fea de esta manera. Básicamente solo quiero poder hacer esto con un diagrama de dispersión.

Alguien sabe cómo resolver esto?

Aquí hay un ejemplo mínimo de mi código, para solo dos colores:

from mpl_toolkits.mplot3d import art3d import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt from matplotlib import gridspec art3d.zalpha = lambda *args:args[0] numcols = 20 percentage = 50 def load(Td, pc): T = np.load(str(pc) + ''pctTemperaturesTd='' + str(Td) + ''.npy'') D = np.load(str(pc) + ''pctDensitiesTd='' + str(Td) + ''.npy'') CD = np.load(str(pc) + ''pctColDensitiesTd='' + str(Td) + ''.npy'') return T, D, CD def colors(ax): colors = np.zeros((numcols, 4)) cm = plt.get_cmap(''gist_rainbow'') ax.set_color_cycle([cm(1.*i/numcols) for i in range(numcols)]) for i in range(numcols): color = cm(1.*i/numcols) colors[i,:] = color return colors # LOAD DATA T10, D10, CD10 = load(10, percentage) T200, D200, CD200 = load(200, percentage) # 3D PLOT fig = plt.figure(1) gs = gridspec.GridSpec(4, 4) ax = fig.add_subplot(gs[:-1,:-1], projection=''3d'') colours = colors(ax) ax.plot(T200/100., np.log10(D200), np.log10(CD200), ''*'', markersize=10,color=colours[10], mec = colours[10], label=''Td = 200'', alpha=1) ax.plot(T10/100., np.log10(D10), np.log10(CD10), ''*'', markersize=10,color=colours[0], mec = colours[0], label=''Td = 10'', alpha=1) ax.set_xlabel(''/nTg/100'', fontsize=''x-large'') ax.set_ylabel(''/nlog(nH)'', fontsize=''x-large'') ax.set_zlabel(''/nlog(colDen)'', fontsize=''x-large'') ax.set_xlim(0,5) #ax.set_zlim(0,) ax.set_ylim(2,6) # PROJECTIONS # Tg, nH ax2 = fig.add_subplot(gs[3,0]) ax2.scatter(T200/100., np.log10(D200), marker=''*'', s=10, color=colours[10], label=''Td = 200'', alpha=1, edgecolor=colours[10]) ax2.scatter(T10/100., np.log10(D10), marker=''*'', s=10, color=colours[0], label=''Td = 10'', alpha=1, edgecolor=colours[0]) ax2.set_xlabel(''Tg/100'') ax2.set_ylabel(''log(nH)'') ax2.set_xlim(0,6) # Tg, colDen ax3 = fig.add_subplot(gs[3,1]) ax3.scatter(T200/100., np.log10(CD200), marker=''*'', s=10, color=colours[10], label=''Td = 200'', alpha=1, edgecolor=colours[10]) ax3.scatter(T10/100., np.log10(CD10), marker=''*'', s=10, color=colours[0], label=''Td = 10'', alpha=1, edgecolor=colours[0]) ax3.set_xlabel(''Tg/100'') ax3.set_ylabel(''log(colDen)'') ax3.set_xlim(0,6) # nH, colDen ax4 = fig.add_subplot(gs[3,2]) ax4.scatter(np.log10(D200), np.log10(CD200), marker=''*'', s=10, color=colours[10], label=''Td = 200'', alpha=1, edgecolor=colours[10]) ax4.scatter(np.log10(D10), np.log10(CD10), marker=''*'', s=10, color=colours[0], label=''Td = 10'', alpha=1, edgecolor=colours[0]) ax4.set_xlabel(''log(nH)'') ax4.set_ylabel(''log(colDen)'') # LEGEND legend = fig.add_subplot(gs[:,3]) text = [''Td = 10'', ''Td = 20'', ''Td = 30'', ''Td = 40'', ''Td = 50'', ''Td = 60'', ''Td = 70'', ''Td = 80'', ''Td = 90'', ''Td = 100'', ''Td = 110'', ''Td = 120'', ''Td = 130'', ''Td = 140'', ''Td = 150'', ''Td = 160'', ''Td = 170'', ''Td = 180'', ''Td = 190'', ''Td = 200''] array = np.arange(0,2,0.1) for i in range(len(array)): legend.scatter(0, i, marker=''*'', s=100, c=colours[numcols-i-1], edgecolor=colours[numcols-i-1]) legend.text(0.3, i-0.25, text[numcols-i-1]) legend.set_xlim(-0.5, 2.5) legend.set_ylim(0-1, i+1) legend.axes.get_xaxis().set_visible(False) legend.axes.get_yaxis().set_visible(False) gs.tight_layout(fig) plt.show()