Domanda

Devo tracciare alcuni dati in varie forme. Attualmente sto usando Matplotlib e sono abbastanza contento delle trame che sono in grado di produrre.

Questa domanda è su come tracciare l'ultimo. I dati sono simili alla & Quot; tabella delle distanze & Quot ;, come this (solo più grande, la mia tabella è 128x128 e ha ancora 3 o più numeri per elemento).

Ora, i miei dati sono molto meglio " strutturato " di una tabella delle distanze (i miei dati non variano " casualmente " come in una tabella delle distanze in ordine alfabetico), quindi un 3D barchart , o forse 3 di questi, sarebbe perfetto. La mia comprensione è che un tale grafico manca in Matplotlib.

Potrei usare un Countor3d (colorato) come questi o qualcosa in 2D come imshow, ma non è davvero ben rappresentativo di ciò che sono i dati (i dati hanno significato solo nei miei 128 punti, non c'è nulla tra due punti). E l'altezza delle barre è più leggibile del colore, IMO.

Quindi le domande:

  1. è possibile creare un grafico a barre 3D in Matplotlib? Dovrebbe essere chiaro che intendo con un dominio 2D, non solo un diagramma a barre 2D con un & Quot; fake & Quot; Rendering 3D a fini estetici
  2. se la risposta alla domanda precedente è no, allora c'è qualche altra libreria in grado di farlo? Preferisco fortemente qualcosa basato su Python, ma sto bene con altre possibilità compatibili con Linux
  3. se la risposta alla domanda precedente è no, allora hai qualche suggerimento su come mostrare quei dati? Per esempio. creare una tabella con i valori, sovrapposti a imshow o altro modo colorato?
È stato utile?

Soluzione

MyavaVi2 può rendere grafici a barre 3D (scorri verso il basso). Dopo aver MayaVi / VTK / ETS / etc . installato tutto funziona magnificamente, ma può essere un po 'di lavoro ottenere tutto installato. Ubuntu ha tutto in pacchetto, ma sono l'unica distribuzione Linux che conosco.

Altri suggerimenti

Da qualche tempo, matplotlib non aveva supporto 3D, ma è stato aggiunto di nuovo recentemente . Dovrai usare la versione svn, poiché da allora non è stata rilasciata alcuna versione e la documentazione è un po 'scarsa (vedi esempi / mplot3d / demo.py). Non so se mplot3d supporta grafici a barre 3D reali, ma una delle demo sembra un po 'come se potesse essere estesa a qualcosa del genere.

Modifica: il codice sorgente per la demo è in gli esempi ma per qualche motivo il risultato è non. Intendo la funzione test_polys, ed ecco come appare:

figura di esempio http://www.iki.fi/jks/tmp/poly3d.png

La funzione test_bar2D sarebbe ancora migliore, ma è commentata nella demo in quanto provoca un errore con l'attuale versione di svn. Potrebbe essere un problema banale o qualcosa di più difficile da risolvere.

Un'altra possibilità è Gnuplot, che può disegnare una sorta di pseudo Grafici a barre 3D e gnuplot.py consente l'interfacciamento a Gnuplot da Python. Non l'ho provato io stesso, però.

Questo è il mio codice per un semplice Bar-3d usando matplotlib.

import mpl_toolkits
from mpl_toolkits.mplot3d import Axes3D   
import matplotlib.pyplot as plt
%matplotlib inline

## The value you want to plot 
zval=[0.020752244,0.078514652,0.170302899,0.29543857,0.45358061,0.021255922,0.079022499,\
  0.171294169,0.29749654,0.457114286,0.020009631,0.073154019,0.158043498,0.273889264,0.419618287]    

fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(111,projection='3d')
col=["#ccebc5","#b3cde3","#fbb4ae"]*5
xpos=[1,2,3]*5
ypos=range(1,6,1)*5
zpos=[0]*15
dx=[0.4]*15
dy=[0.5]*15
dz=zval

for i in range(0,15,1):
     ax.bar3d(ypos[i], xpos[i], zpos[i], dx[i], dy[i], dz[i],     
color=col[i],alpha=0.75)

ax.view_init(azim=120)
plt.show()      

http://i8.tietuku.com/ea79b55837914ab2.png

Potresti dare un'occhiata a Chart Director:

  

http://www.advsofteng.com

Ha una varietà piuttosto ampia di grafici e grafici e ha una bella API Python (e diverse altre lingue).

Esistono due edizioni: la versione gratuita mette a soqquadro l'immagine generata e la la versione a pagamento ha un prezzo abbastanza ragionevole.

Ecco uno dei più interessanti grafici a barre in pila 3D:

 esempio grafico
(fonte: advsofteng.com )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top