Python: Mappa di densita` in 2D

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

Python: Mappa di densita` in 2D

Messaggioda faustomr » lunedì 16 aprile 2018, 15:42

Salve a tutti,

sto cercando di creare una mappa di densita` con python. Il formato dei dati che sto leggendo e` il seguente. dove la prima colonna rappresenta una posizione sulla coordinata X, la seconda colonna la posizione sulla coordinata Y, e la terza e` una densita`:
Codice: Seleziona tutto
   28.3504505       29.0699501      0.268023282   
   35.2485809       20.2562389      0.816154957   
   34.6665802       61.0810776      0.246915996   
   50.3290787       19.9683323      0.172673523   
   55.8408813       19.7036400      0.350994051   
   56.7462769       20.0150356      0.331803918   
   21.0347328       20.6788921      0.182483748   
   30.5288696       21.6862411      0.262596667   
   40.0981827       22.0056705      0.233366787   
   43.0356827       21.1052628      0.227440864   
   49.6228790       21.5872326      0.173172787   
   50.4580803       22.1529598      0.420962095   
   51.9556808       20.5895081      0.304322124   
   51.1397781       21.3327503      0.474746525   
   54.1796799       22.1334896      0.358656794   
   57.3273773       20.8512363      0.190954536


Il codice, che ho trovato in rete e che ho` minimamente cambiato, e` il seguente:
Codice: Seleziona tutto
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
x, y, z = np.loadtxt('dmap.dat', unpack=True)
N = len(z)
Z = z.reshape(N, N)
plt.imshow(Z, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)),
        cmap=cm.hot, norm=LogNorm())
plt.colorbar()
plt.show()


Quando compilo, pero`, ottengo questo errore:

Codice: Seleziona tutto
Traceback (most recent call last):
  File "map.py", line 7, in <module>
    Z = z.reshape(N, N)
ValueError: total size of new array must be unchanged

Io non conosco bene python. Qualcuno mi puo` aiutare a far funzionare il codice?

Grazie mille.
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda DoctorStrange » lunedì 16 aprile 2018, 15:49

Non sò se tu sia vincolato ad usare phyton per qualche ragione particolare, ma se usassi gnuplot, potresti plottare il tuo grafico in 3D passandogli il file in quell'esatto formato, magari devi prima semplicemente impostare un pò gnuplot specificando ad esempio l'intervallo di variazione degli assi, i colori, o parametri simili.

Saluti
Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1218
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » lunedì 16 aprile 2018, 15:53

Si ho provato con gnuplot, e rimaneggiando un po' il file, ma la qualita` del grafico che ottengo non e` molto buona. Vorrei quindi provare con python per vedere se posso ottenere qualcosa di meglio, o se sono io che mi aspetto troppo dai miei dati. Inoltre mi sembra un buon punto di partenza per cominciare ad usare python.

Grazie del suggerimento!
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda DoctorStrange » lunedì 16 aprile 2018, 16:09

Non capisco in quale maniera ti aspetti di meglio se i dati sono gli stessi. Vuoi fare qualche manipolazione sui dati stessi, come interpolazione, per raddoppiare il numero di letture?
Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1218
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » lunedì 16 aprile 2018, 16:11

Non mi aspetto niente di meglio perche` non ho esperienza con python, voglio solo vedere se python permette piu` liberta` in termini di manipolazioni grafiche. Una volta che ho un codice funzionante ci posso sperimentare sopra. Mi sai aiutare con il codice che ho postato?
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » lunedì 16 aprile 2018, 16:49

Prova a cambiare la sesta riga in
Codice: Seleziona tutto
N = int(len(z)**.5)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » lunedì 16 aprile 2018, 16:57

Da` sempre lo stesso errore vaeVictis.
Quanto proponi era nel codice originale, avrei forse dovuto lasciarlo cosi` come era..
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » lunedì 16 aprile 2018, 17:24

A me questo codice
Codice: Seleziona tutto
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
x, y, z = np.loadtxt('dmap.dat', unpack=True)
N = int(len(z)**.5)
z = z.reshape(N, N)
plt.imshow(z, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)),
        cmap=cm.hot, norm=LogNorm())
plt.colorbar()
plt.show()


produce questa immagine
figure_1.png
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggioda DoctorStrange » lunedì 16 aprile 2018, 19:09

Sei proprio certo di aver postato l'intero codice?

Sospetto qualche problema a livello dinrendering, magarinper qualche libreria mancante o problematica. Prova a vedere il syslog se, magari, riporta qualche anomalia su qualche libreria condivisa al momento di generare l'immagine.
Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1218
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » lunedì 16 aprile 2018, 19:24

@DoctorStrange
Basta la traceback per capire l'errore.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » martedì 17 aprile 2018, 19:03

Si il codice e` postato interamente..
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » martedì 17 aprile 2018, 19:05

@vaeVictis: a me continua a dare lo stesso errore. Debba forse cambiare versione di python?
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » martedì 17 aprile 2018, 20:40

Lo vedo improbabile che devi cambiare Python.
Questo è 2.7

Posta il codice che stai usando, il contenuto del file il comando con cui lo lanci e l'errore che ottieni.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » mercoledì 18 aprile 2018, 18:46

Codice ed errore sono sempre gli stessi. Riporto qui quanto richiesto:
Codice:
Codice: Seleziona tutto
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
x, y, z = np.loadtxt('dmap.dat', unpack=True)
N = len(z)
Z = z.reshape(N, N)
plt.imshow(Z, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)),
        cmap=cm.hot, norm=LogNorm())
plt.colorbar()
plt.show()

File:
Codice: Seleziona tutto
   28.3504505       29.0699501      0.268023282   
   35.2485809       20.2562389      0.816154957   
   34.6665802       61.0810776      0.246915996   
   50.3290787       19.9683323      0.172673523   
   55.8408813       19.7036400      0.350994051   
   56.7462769       20.0150356      0.331803918   
   21.0347328       20.6788921      0.182483748   
   30.5288696       21.6862411      0.262596667   
   40.0981827       22.0056705      0.233366787   
   43.0356827       21.1052628      0.227440864   
   49.6228790       21.5872326      0.173172787   
   50.4580803       22.1529598      0.420962095   
   51.9556808       20.5895081      0.304322124   
   51.1397781       21.3327503      0.474746525   
   54.1796799       22.1334896      0.358656794   
   57.3273773       20.8512363      0.190954536

Errore:
Codice: Seleziona tutto
Traceback (most recent call last):
  File "map.py", line 8, in <module>
    Z = z.reshape(N, N)
ValueError: total size of new array must be unchange

Linea di comando:
Codice: Seleziona tutto
python map.py
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » mercoledì 18 aprile 2018, 19:53

fausomr... Non hai modificato il codice. Ci credo che riottieni lo stesso errore.

Fai la modifica che ti ho indicato e riprova
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » mercoledì 18 aprile 2018, 20:12

L'ho fatta verVictis. Non cambia nulla. Riporto il codice con la tua modifica e l'errore:

Codice: Seleziona tutto
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
x, y, z = np.loadtxt('dmap.dat', unpack=True)
N = int(len(z)**.5)
z = z.reshape(N, N)
plt.imshow(z, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)),
        cmap=cm.hot, norm=LogNorm())
plt.colorbar()
plt.show() 


Codice: Seleziona tutto
Traceback (most recent call last):
  File "map4.py", line 7, in <module>
    z = z.reshape(N, N)
ValueError: total size of new array must be unchanged
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » giovedì 19 aprile 2018, 16:28

Non ti funziona perché lo stai lanciando su un file in cui le dimensioni di x, y e z non sono un quadrato perfetto (nel caso del file che hai postato hanno dimensione 16, che è il quadrato di 4).
Cosa necessaria per il tipo di reshape che fai.

Pertanto, devi cambiare metodo.
Per capire quale scegliere, devi però dare informazioni sul tipo di dati che hai nel file.
Come sono organizzati? Hai una colonna di X una di Y è una coi valori della densità associati?

Comunque qui dovresti trovare sicuramente un esempio che fa al caso tuo.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » giovedì 19 aprile 2018, 20:30

Scusa il doppio messaggio.
Ho editato quello precedente aggiungendo un link.
Giusto perché se già lo hai letto magari ti sfugge

Ciao
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggioda faustomr » venerdì 20 aprile 2018, 11:43

Grazie mille vaeVictis. Effettivamente il numero di righe del file deve essere un quadrato perfetto, quindi il problema non e` il codice ma il file.
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 836
Iscrizione: marzo 2008

Re: Python: Mappa di densita` in 2D

Messaggioda vaeVictis » venerdì 20 aprile 2018, 17:54

Il file di dati è quello che è.
L'ideale sarebbe scrivere un programmino in Python che vada bene a prescindere dal tipo di file di dati.
Al link che ti ho dato dovresti trovare tutti gli esempi possibili e immaginabili. Non credo che nel mondo scientifico facciano mappe di densità con la clausola che il file di dati contenga un "quadrato perfetto" di dati su ogni colonna :)

Fai sapere se risolvi, altrimenti cerco di fare qualcosa io.
:ciao:
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4088
Iscrizione: luglio 2012
Desktop: Unity
Distribuzione: Ubuntu 16.04 64bit


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: 0 utenti registrati e 5 ospiti