Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Epaisseur d'un graphe 3D avec Matplotlib

+2 votes

Je veux faire un graphe 3D de l'image rice.png classique en Image processing avec matplotlib.

rice = misc.imread('rice.png')
height, width = rice.shape
ax = fig.gca(projection='3d')
X = np.arange(0, height, 1)
Y = np.arange(0, width, 1)
X, Y = np.meshgrid(X, Y)
surf = ax.plot_surface(X, Y, rice, cmap=cm.coolwarm, linewidth=0)
plt.title('3D representation of image')
plt.show()

Ca marche parfaitement sauf que l'échelle vertical est super étendue donc on voit rien. L'idée c'est d'arriver à ce qu'on peut voir dans le 2. ici.

L'astuce que j'ai trouvé, c'est d'utiliser set_zlim(0, 2000) mais ca donne un truc moche.

Savez comment on peut faire ca ?

demandé 13-Aou-2015 par Morkav (208 points)

Ne connaissant pas la lib ni les fonctions que tu utilises je galère à reproduire ton problème, donc à t'aider. J'ai déjà découvert par moi-même les imports suivants pour parvenir à faire la figure:

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

Est-ce que tu peux nous donner tous les éléments nécessaires pour reproduire ton exemple?

1 Réponse

+1 vote
 
Meilleure réponse

Je ne suis pas sûrs que ce soit possible simplement. Il faut je pense changer la matrice de projection.

Je ne peux pas tester là mais j'ai trouvé cette solution qui pourrait fonctionner. L'idée est faire un monkey-patch de la fonction get_proj par une qui prenne en compte le changement d'échelle que tu veux.

répondu 14-Aou-2015 par Kje (464 points)
sélectionné 4-Sep-2015 par Morkav

J'ai essayé, ca marche a peu près mais ca me donne quand même pas le résultat qu'on peut obtenir avec MATLAB..

J'imagine. J'utilise peu mplot3d donc je ne t'aiderai pas plus. D'autant qu'il me semble qu'il est encore considéré comme une fonctionnalité expérimental.

C'est la meilleure réponse que j'ai pu trouver donc je te mets le petit v vert.

...