Python, Numpy, .xvg-filer - göra graf mha två .xvg filer

Permalänk
Medlem

Python, Numpy, .xvg-filer - göra graf mha två .xvg filer

(Ber om ursäkt om detta inte var korrekt Forum!)

Jag gör ett "internship" med steered molecular dynamics. I kort ett det är kasst upplägg med en handledare som är delvis pappaledig och som mest kommunicerar via en chatfunktion, där han knappt svarar alls.
Min uppgift är att göra en graf. Jag ska använda:

Python och Numpy

tillsammans med:

Två .xvg filer, där den ena har kraft (force) vs tid och den andra avstånd mot tid. Slutgrafen ska ha kraft mot avstånd.

Handledarens ord förutom det ovan är "googla runt, stackoverflow.com har mycket".

Han vet mycket väl att jag inte har någon erfarenhet av Python eller Numpy. Jag har inte hittat det jag ska göra i någon tråd och jag vet inte vart jag ska börja om jag ska göra detta själv.
Tips om bra sida att kolla på, hur jag ska gå tillväga för att försöka komma någonstans, eller annat mottages tacksamt!

Permalänk
Medlem

Hejsan!

Trist situation som du har hamnat i!

Jag har kört ganska mycket numpy och har plottat grafer tillsammas med modulen matplotlibMatplolib.

Här är ett exempel på hur du kan visualisera data från en numpy.array
Numpy plot(x,y).

Har du något exempel på din indata?

/z

Edit: Formatering

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Medlem

https://gromacswrapper.readthedocs.io/en/latest/installation....
https://stackoverflow.com/a/65725635

Det verkar som att xvg bara är textfiler så du kan ju bara öppna med notepad och se hur de ser ut. Den andra länken borde räcka egentligen.

Permalänk
Medlem
Skrivet av pine-orange:

https://gromacswrapper.readthedocs.io/en/latest/installation....
https://stackoverflow.com/a/65725635

Det verkar som att xvg bara är textfiler så du kan ju bara öppna med notepad och se hur de ser ut. Den andra länken borde räcka egentligen.

Då behövs bara lite exempeldata så kan vi snabbt fixa en liten parser som läser och fixar en plot eller två!

/z

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Medlem

Hittade detta https://www.compchems.com/how-to-extract-and-plot-thermodynam...

Men är inte så haj på python så det kanske inte är exakt vad som efterfrågas..

Permalänk
Medlem
Skrivet av danneee:

Hittade detta https://www.compchems.com/how-to-extract-and-plot-thermodynam...

Men är inte så haj på python så det kanske inte är exakt vad som efterfrågas..

Den såg väldigt lovande ut, detta ser ganska rakt fram ut:

import matplotlib.pyplot as plt import numpy as np x,y = np.loadtxt("volume.xvg",comments=["@", "#"],unpack=True) plt.plot(x,y) plt.xlabel("time (ps)") plt.ylabel("volume (nm^3)") plt.savefig("volume.png", format="png", dpi=300) plt.show()

Vilket kanske i ditt fall kan modifieras till något liknande

import matplotlib.pyplot as plt import numpy as np # Load file 1 f, t = np.loadtxt("force-time.xvg",comments=["@", "#"],unpack=True) # Load file 2 d, t = np.loadtxt("displacment-time.xvg",comments=["@", "#"],unpack=True) # Plot figure plt.plot(f,d) plt.xlabel("Force [N]") plt.ylabel("Displacement [mm]") plt.savefig("volume.png", format="png", dpi=300) plt.show()

Ingen av modulerna numpy och matplotlib följer med i installationen av Python utan dessa behöver först installeras. Kolla på respektive sida för instruktioner om det inte redan är fixat.
/z

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Hedersmedlem

*Tråd flyttad*

Visa signatur

Danskjävel så krattar som en skrivare...

Permalänk
Medlem
Skrivet av zonar:

Den såg väldigt lovande ut, detta ser ganska rakt fram ut:

import matplotlib.pyplot as plt import numpy as np x,y = np.loadtxt("volume.xvg",comments=["@", "#"],unpack=True) plt.plot(x,y) plt.xlabel("time (ps)") plt.ylabel("volume (nm^3)") plt.savefig("volume.png", format="png", dpi=300) plt.show()

Vilket kanske i ditt fall kan modifieras till något liknande

import matplotlib.pyplot as plt import numpy as np # Load file 1 f, t = np.loadtxt("force-time.xvg",comments=["@", "#"],unpack=True) # Load file 2 d, t = np.loadtxt("displacment-time.xvg",comments=["@", "#"],unpack=True) # Plot figure plt.plot(f,d) plt.xlabel("Force [N]") plt.ylabel("Displacement [mm]") plt.savefig("volume.png", format="png", dpi=300) plt.show()

Ingen av modulerna numpy och matplotlib följer med i installationen av Python utan dessa behöver först installeras. Kolla på respektive sida för instruktioner om det inte redan är fixat.
/z

Sort tack för alla svar! Ska kolla igenom och se om jag kan förstå det och få till detta

Hur gör du, förstår du allt du skriver och varför du skriver det, eller använder många mycket färdiga bitar (tex genom sökande i forum) som man pusslar ihop?

Börjar den automatiskt att läsa av där # och @ slutar (jag ser en bit som jag eventuellt kan tolka som att # och @ ska tolkas som kommentarer) eller bör jag kopiera över själva x och y raderna i något nytt dokument?

Nedan är översta delen av de två filerna. Tiden fortsätter upp till 10 000 ns.

# This file was created Sat Nov 26 22:15:38 2022
# Created by:
# GROMACS - gmx mdrun, 2021.6-EasyBuild-4.6.2 (-:
#
# Executable: /sw/arch/RHEL8/EB_production/2022/software/GROMACS/2021.6-foss-2022a/bin/gmx_mpi
# Data prefix: /sw/arch/RHEL8/EB_production/2022/software/GROMACS/2021.6-foss-2022a
# Working dir: /gpfs/scratch1/nodespecific/tcn370/evanleuven.1875753
# Command line:
# gmx_mpi mdrun -deffnm md -v -ntomp 1 -maxh 3
# gmx mdrun is part of G R O M A C S:
#
# GROningen MAchine for Chemical Simulation
#
@ title "Pull force"
@ xaxis label "Time (ps)"
@ yaxis label "Force (kJ/mol/nm)"
@TYPE xy
0.0000 70.0374
0.1000 75.4116
0.2000 81.2423
0.3000 33.8946
0.4000 4.1915
0.5000 16.3492
0.6000 16.4572
0.7000 17.499
0.8000 31.6646
0.9000 41.5101
1.0000 53.8529
1.1000 59.7578
1.2000 61.4971
1.3000 74.6553
1.4000 58.7796
1.5000 53.4414
1.6000 23.5608
1.7000 14.921
1.8000 14.9907
1.9000 -4.31798
2.0000 0.875456
2.1000 12.201
2.2000 29.2113
2.3000 12.5113
2.4000 28.7196
2.5000 20.3133
2.6000 3.54749
2.7000 -3.36847
2.8000 -2.53457
2.9000 22.9303
3.0000 23.4295
3.1000 3.36555
3.2000 9.77809
3.3000 5.79202
3.4000 -0.810893
3.5000 -17.9361

# This file was created Sat Nov 26 22:15:38 2022
# Created by:
# GROMACS - gmx mdrun, 2021.6-EasyBuild-4.6.2 (-:
#
# Executable: /sw/arch/RHEL8/EB_production/2022/software/GROMACS/2021.6-foss-2022a/bin/gmx_mpi
# Data prefix: /sw/arch/RHEL8/EB_production/2022/software/GROMACS/2021.6-foss-2022a
# Working dir: /gpfs/scratch1/nodespecific/tcn370/evanleuven.1875753
# Command line:
# gmx_mpi mdrun -deffnm md -v -ntomp 1 -maxh 3
# gmx mdrun is part of G R O M A C S:
#
# GROningen MAchine for Chemical Simulation
#
@ title "Pull COM"
@ xaxis label "Time (ps)"
@ yaxis label "Position (nm)"
@TYPE xy
@ view 0.15, 0.15, 0.75, 0.85
@ legend on
@ legend box on
@ legend loctype view
@ legend 0.78, 0.8
@ legend length 2
@ s0 legend "1"
@ s1 legend "1 ref"
0.0000 3.92996 4
0.1000 3.9246 4.00002
0.2000 3.91879 4.00003
0.3000 3.96615 4.00005
0.4000 3.99587 4.00006
0.5000 3.98373 4.00008
0.6000 3.98363 4.00009
0.7000 3.98261 4.00011
0.8000 3.96846 4.00012
0.9000 3.95862 4.00014
1.0000 3.9463 4.00015
1.1000 3.94041 4.00017
1.2000 3.93868 4.00018
1.3000 3.92554 4.0002
1.4000 3.94143 4.00021
1.5000 3.94678 4.00023
1.6000 3.97668 4.00024
1.7000 3.98533 4.00026
1.8000 3.98528 4.00027
1.9000 4.0046 4.00029
2.0000 3.99942 4.0003
2.1000 3.98811 4.00032
2.2000 3.97112 4.00033
2.3000 3.98783 4.00035
2.4000 3.97164 4.00036
2.5000 3.98006 4.00038
2.6000 3.99684 4.00039
2.7000 4.00377 4.00041
2.8000 4.00295 4.00042
2.9000 3.9775 4.00044
3.0000 3.97702 4.00045
3.1000 3.9971 4.00047
3.2000 3.9907 4.00048
3.3000 3.9947 4.0005
3.4000 4.00132 4.00051
3.5000 4.01846 4.00053

Permalänk
Medlem
Skrivet av danneee:

Hittade detta https://www.compchems.com/how-to-extract-and-plot-thermodynam...

Men är inte så haj på python så det kanske inte är exakt vad som efterfrågas..

Tack!!

Permalänk
Medlem
Skrivet av pine-orange:

https://gromacswrapper.readthedocs.io/en/latest/installation....
https://stackoverflow.com/a/65725635

Det verkar som att xvg bara är textfiler så du kan ju bara öppna med notepad och se hur de ser ut. Den andra länken borde räcka egentligen.

Tack!!

Permalänk
Medlem

Jag har knåpat ganska många rader kod och program för allt ifrån utvärdering av provning, automation av simuleringsflöden till utveckling av utmattningskriterier för härdade stål. Baserat på informationen i din exempeldata behövs lite modifierande av koden för att det ska funka rakt av.

Numpy modulen här läser in filen som om det är text och allt som startar med @ eller# anses vara en kommentar. Det tar med andra ord allt som inte är bortkommenterat och gör om det till en numpy.array (tänk en vektor). Numpy returnerar en vector per kolumn.

Resten av koden är för att skapa figuren samt sätta lite förklaringar på axlarna.

import matplotlib.pyplot as plt import numpy as np # Replace to your file names here force_time_file_path = "force-time.xvg" displacement_time_file_path = "displacment-time.xvg" # Load file 1 time, force = np.loadtxt(force_time_file_path ,comments=["@", "#"],unpack=True) # Load file 2 time, displacement, reference_displacement = np.loadtxt(displacement_time_file_path ,comments=["@", "#"],unpack=True) # Plot figure plt.plot(force, displacement, reference_displacement ) plt.xlabel("Force [N]") plt.ylabel("Displacement [mm]") plt.savefig("volume.png", format="png", dpi=300) plt.show()

/z

Visa signatur

C2D E6300 @ 3.2HGz 1.2V | Thermalright 120 Extr. | Gainward 8800 GT Golden Sample |Samsung 2x500Gb | Corsair VX 550V | Antec P182 [img]http://valid.x86-secret.com/cache/banner/421648.png[/img]

Permalänk
Medlem
Skrivet av zonar:

Jag har knåpat ganska många rader kod och program för allt ifrån utvärdering av provning, automation av simuleringsflöden till utveckling av utmattningskriterier för härdade stål. Baserat på informationen i din exempeldata behövs lite modifierande av koden för att det ska funka rakt av.

Numpy modulen här läser in filen som om det är text och allt som startar med @ eller# anses vara en kommentar. Det tar med andra ord allt som inte är bortkommenterat och gör om det till en numpy.array (tänk en vektor). Numpy returnerar en vector per kolumn.

Resten av koden är för att skapa figuren samt sätta lite förklaringar på axlarna.

import matplotlib.pyplot as plt import numpy as np # Replace to your file names here force_time_file_path = "force-time.xvg" displacement_time_file_path = "displacment-time.xvg" # Load file 1 time, force = np.loadtxt(force_time_file_path ,comments=["@", "#"],unpack=True) # Load file 2 time, displacement, reference_displacement = np.loadtxt(displacement_time_file_path ,comments=["@", "#"],unpack=True) # Plot figure plt.plot(force, displacement, reference_displacement ) plt.xlabel("Force [N]") plt.ylabel("Displacement [mm]") plt.savefig("volume.png", format="png", dpi=300) plt.show()

/z

Stort tack! Och länkarna du skicka i ditt första svar var precis vad jag försökte hitta (men jag villade nog bort mig i vad jag använde för sökord)!