Python: Mappa di densita` in 2D

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Python: Mappa di densita` in 2D

Messaggio da faustomr »

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
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: Python: Mappa di densita` in 2D

Messaggio da DoctorStrange »

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
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

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
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: Python: Mappa di densita` in 2D

Messaggio da DoctorStrange »

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
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

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
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

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
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

Da` sempre lo stesso errore vaeVictis.
Quanto proponi era nel codice originale, avrei forse dovuto lasciarlo cosi` come era..
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

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
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: Python: Mappa di densita` in 2D

Messaggio da DoctorStrange »

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
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

@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
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

Si il codice e` postato interamente..
Avatar utente
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

@vaeVictis: a me continua a dare lo stesso errore. Debba forse cambiare versione di python?
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

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
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

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
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

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
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

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
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

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: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

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
faustomr
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 840
Iscrizione: venerdì 28 marzo 2008, 13:20

Re: Python: Mappa di densita` in 2D

Messaggio da faustomr »

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
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Python: Mappa di densita` in 2D

Messaggio da vaeVictis »

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.»
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: steff e 16 ospiti