PDA

View Full Version : [python] Matplotlib


B|4KWH|T3
04-03-2010, 16:49
Salve, sto plottando dei dati in un grafico 3D con matplotlib.

Su ogni asse c'è una proprietà di una proteina, misurata con una metrica. Ogni punto del grafico 3D rappresenta quindi una proteina

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


rawfile = [line for line in open("final.csv").readlines()]
csvhandler = csv.reader(rawfile)
table = [row for row in csvhandler]

fig = plt.figure()
ax = Axes3D(fig)

xs = np.array([float(row[2]) for row in table[1:]])
ys = np.array([float(row[3]) for row in table[1:]])
zs = np.array([float(row[5]) for row in table[1:]])
ax.scatter(xs, ys, zs)

ax.set_xlabel("VolRatio")
ax.set_ylabel("LoopDisplacement")
ax.set_zlabel("HelixAltDisplacement")

plt.show()



Fin qui, quasi tutto bene. A parte il piccolo particolare che non c'è verso di far capire alla funzione scatter altri parametri opzionali. fa niente basta che mi plotta i dati.
Però vorrei fare in modo di visualizzare come etichette il nome delle proteine passandoci sopra col mouse (perchè se vengono fuori i nomi tutti insieme non si capisce nulla essendo circa 400 punti).

Qualcuno ha già usato/sa usare questa libreria e sa darmi una indicazione?
Sto guardando nella documentazione ma non riesco tanto ad orientarmi in mezzo a tanta roba.

Badrepent
04-03-2010, 20:02
Allora lo scorso per un esame avevo anche io il problema di plottare dati scientifici...
sono partito anche io con matplotlib, poi però sono passato ad uno strumento più potente ovvero Mayavi

http://code.enthought.com/projects/mayavi/

Non so se già tu lo conoscessi o meno ma mi sono trovato piuttosto bene con l'editor e la relativa visualizzazione grafica sempre sincronizzate.

B|4KWH|T3
04-03-2010, 21:00
Allora lo scorso per un esame avevo anche io il problema di plottare dati scientifici...
sono partito anche io con matplotlib, poi però sono passato ad uno strumento più potente ovvero Mayavi

http://code.enthought.com/projects/mayavi/

Non so se già tu lo conoscessi o meno ma mi sono trovato piuttosto bene con l'editor e la relativa visualizzazione grafica sempre sincronizzate.

E' esattamente quello che ho fatto, solo che in questo momento mi sta plottando i dati schiacciati su uno stesso piano (in pratica la visualizzazione è tridimensionale, ma tutti i punti sono sullo stesso piano o_O)

Ho seguito pari pari un esempio

import csv

rawfile = [line for line in open("final.csv").readlines()]
csvhandler = csv.reader(rawfile)
table = [row for row in csvhandler]

x = [float(row[2]) for row in table[1:]]
y = [float(row[3]) for row in table[1:]]
z = [float(row[5]) for row in table[1:]]
s = [1.]*395

labels = [row[0] for row in table[1:]]

from enthought.mayavi import mlab

mlab.points3d(x,y,z,s,scale_factor=1)
mlab.show()

Non capisco proprio perchè :muro:

B|4KWH|T3
04-03-2010, 21:13
Niente, risolto.

Semplicemente la scala di un asse ;)