2017-09-23 4 views
1

J'ai un problème (bug?) Avec traceur 3D dans matplotlib que je me demande si quelqu'un peut vous aider s'il vous plaît?Matplotlib 3D: les limites de l'axe sont toujours trop grandes (ne définit pas correctement les limites)

Comme on peut le voir par les parcelles par exemple galerie matplotlib (par exemple à partir de: https://matplotlib.org/examples/mplot3d/surface3d_demo.html), lorsque l'utilisateur règle les limites d'axe manuellement, et une graduation est placée à la limite, l'axe lié se prolonge un peu: enter image description here

Je veux que l'axe affiche l'étiquette graduée 1.01, mais cela devrait être le sommet du cube (sans espace gris/ligne noire au-dessus). Est-ce possible s'il vous plaît? En tant que demande distincte, plus mineure, je voudrais ensuite dessiner une ligne noire autour du bord de la grille pour la faire ressortir. Ceci est moins important que de fixer les limites, cependant.

Pour référence, voici le code qui rend le tracé ci-dessus:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
from matplotlib import cm 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 
import numpy as np 


fig = plt.figure() 
ax = fig.gca(projection='3d') 

# Make data. 
X = np.arange(-5, 5, 0.25) 
Y = np.arange(-5, 5, 0.25) 
X, Y = np.meshgrid(X, Y) 
R = np.sqrt(X**2 + Y**2) 
Z = np.sin(R) 

# Plot the surface. 
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, linewidth=0, antialiased=False) 

# Customize the z axis. 
ax.set_zlim(-1.01, 1.01) 
ax.zaxis.set_major_locator(LinearLocator(10)) 
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

# Add a color bar which maps values to colors. 
fig.colorbar(surf, shrink=0.5, aspect=5) 

plt.show() 

Répondre

-1

Ce n'est pas un bug.

Vous pouvez activer autoscale de faire parcelle occupent seulement l'espace nécessaire:

Ajout

plt.autoscale(tight=True) 

avant

plt.show() 

devrait fonctionner.

EDIT: Dans mon intrigue cas arrêté à 1,00 obtient, après avoir utilisé autoscale

enter image description here

+0

Merci pour la suggestion, même si je crains que cela ne change rien pour moi. J'ai ajouté le code pour rendre le chiffre à mon message original - cette suggestion fonctionne-t-elle pour vous? Merci. – IanRoberts

+0

Vous avez raison, cette solution n'élimine pas l'espace. – ImportanceOfBeingErnest

+0

@IanRoberts J'ai mis à jour la réponse pour inclure l'intrigue que je reçois. Après avoir appliqué l'autoscale, j'obtiens la limite maximum comme 1.00 au lieu de 1.01 – theLearner