3d - superficies - matplotlib ejes
Ajuste el posicionamiento de la etiqueta en Axes3D de matplotlib (5)
Como práctica de diseño, el texto transformado no es muy legible. Le sugiero que use etiquetas para su eje, tal vez codificadas en color. Así es como lo haces en matplotlib
import matplotlib
matplotlib.use("TKAGG")
import matplotlib.pyplot as pyplot
import mpl_toolkits.mplot3d
figure = pyplot.figure()
figure.subplots_adjust(bottom=0.25, top=0.75)
axes = figure.gca(projection=''3d'')
xLabel = axes.set_xlabel(''X'', fontsize=14, fontweight=''bold'', color=''b'')
yLabel = axes.set_ylabel(''Y'',fontsize=14, fontweight=''bold'', color=''r'')
zLabel = axes.set_zlabel(''Z'',fontsize=14, fontweight=''bold'', color=''g'')
x = pyplot.Rectangle((0, 0), 0.1, 0.1,fc=''b'')
y = pyplot.Rectangle((0, 0), 0.1, 0.1,fc=''r'')
z = pyplot.Rectangle((0, 0), 0.1, 0.1,fc=''g'')
handles, labels = axes.get_legend_handles_labels()
axes.legend((x,y,z),("XXXXXX","YYYYY","ZZZZZZ"),''best'')
plot = axes.plot([1,2,3],[1,2,3])
pyplot.show()
Tengo problemas con las etiquetas de los ejes que superponen las etiquetas de los ticks en matplotlib. He intentado cambiar la posición de las etiquetas "manualmente" aplicando transformaciones o llamando a set_y (), pero no sirvió para nada.
Aquí hay un fragmento que reproduce el problema:
import matplotlib
matplotlib.use("TKAGG")
import matplotlib.pyplot as pyplot
import mpl_toolkits.mplot3d
figure = pyplot.figure()
figure.subplots_adjust(bottom=0.25, top=0.75)
axes = figure.gca(projection=''3d'')
xLabel = axes.set_xlabel(''XXX xxxxxx xxxx x xx x'')
yLabel = axes.set_ylabel(''YY (y) yyyyyy'')
zLabel = axes.set_zlabel(''Z zzzz zzz (z)'')
plot = axes.plot([1,2,3],[1,2,3])
pyplot.show()
Observe cómo las etiquetas xey coinciden con los tics. ¿Puedo resolver esto elegantemente?
Comparto tu frustración. Trabajé en ello durante media hora y no llegué a ninguna parte. Los documentos dicen que set_xlabel toma una etiqueta de arg pero recibo un error (AttributeError: etiqueta de propiedad desconocida). Establecerlo después del hecho no hace nada, en xaxis o w_xaxis.
Aquí hay una solución aproximada:
import matplotlib
matplotlib.use("TKAGG")
import matplotlib.pyplot as pyplot
import mpl_toolkits.mplot3d
figure = pyplot.figure(figsize=(8,4), facecolor=''w'')
ax = figure.gca(projection=''3d'')
xLabel = ax.set_xlabel(''/nXXX xxxxxx xxxx x xx x'', linespacing=3.2)
yLabel = ax.set_ylabel(''/nYY (y) yyyyyy'', linespacing=3.1)
zLabel = ax.set_zlabel(''/nZ zzzz zzz (z)'', linespacing=3.4)
plot = ax.plot([1,2,3],[1,2,3])
ax.dist = 10
pyplot.show()
Realmente necesito seguir con más frecuencia. Soy el mantenedor actual de mplot3d. La razón por la cual los diversos trucos que normalmente funcionan en parcelas 2D en general no funcionan para gráficos en 3D es porque mplot3d se escribió originalmente con los valores predeterminados codificados. También hubo errores en cómo mplot3d calculó el ángulo para representar las etiquetas.
v1.1.0 contiene varias correcciones para mejorar el estado de las cosas. Arreglé el error de cálculo de los ángulos de las etiquetas de los ejes e hice algunos ajustes al espaciado. Para la próxima versión, me gustaría tener ejes 3d para ocupar más que el espaciado de ejes predeterminado, ya que el valor predeterminado se diseñó para tener en cuenta que las etiquetas de tic y las etiquetas de los ejes estarían fuera de los ejes, que no es el caso de mplot3d . Debido a que los espaciamientos están determinados por proporciones relativas en mplot3d, tener un espacio más pequeño para trabajar obliga a que las etiquetas estén más juntas.
En cuanto a otras avenidas posibles para soluciones alternativas, consulte la nota aquí . Una advertencia justa, este diccionario privado no pretende ser una solución permanente, sino más bien un mal necesario hasta que se complete el refactor de mplot3d.
Además, v1.1.0 contiene muchas actualizaciones para la API de mplot3d. Por favor revisa la documentación revisada aquí .
En las nuevas versiones de matplotlib, esta es la forma de hacerlo:
ax.xaxis._axinfo[''label''][''space_factor''] = 2.8
Vea la explicación aquí:
https://github.com/matplotlib/matplotlib/issues/3610
Probado en v1.4, debería funcionar en versiones> 1.1, creo.
Agregue esto para cada eje, adapte el número:
axes.yaxis.labelpad=30
En el enlace de Adam Hughes se menciona que no funciona, pero funciona para mí.