Ich möchte eine Menge von einer langweiligen zu sehen-at .dat
Datei, die Spalte #time in der Datei erstreckt sich von 0 bis 70s, aber ich muss näher kommen Betrachten Sie die Daten (in diesem Fall Kernenergie) von 25s bis 35s.eine .dat Datei manipulieren und kumulative Daten plotten
Ich frage mich, ob es eine Möglichkeit gibt, die Zeitspalte und entsprechende andere Spalten zu manipulieren, um Daten nur für die erforderliche Zeitspanne aufzuzeichnen und zu plotten.
ich bereits einen Code haben, die für mich den Job für 0-70s:
import matplotlib
matplotlib.use('Agg')
import os
import numpy as np
import matplotlib.pyplot as plt
import string
import math
# reads from flash.dat
def getQuantity(folder, basename, varlist):
# quantities[0] should contain only the quantities of varlist[0]
quantities =[]
for i in range(len(varlist)):
quantities.append([])
with open(folder + "/" + basename + ".dat", 'r') as f: # same as f = open(...) but closes the file afterwards.
for line in f:
if not ('#' or 'Inf') in line: # the first line and restarting lines look like this.
for i in range(len(varlist)):
if(varlist[i]==NUCLEAR_ENERGY and len(quantities[i])>0):
quantities[i].append(float(line.split()[varlist[i]])+quantities[i][-1])
else:
quantities[i].append(float(line.split()[varlist[i]]))
return quantities
# end def getQuantity
#create plot
plt.figure(1)
TIME = 0
NUCLEAR_ENERGY = 18
labels = ["time", "Nuclear Energy"]
flashFolder1 = '/home/trina/Pictures' # should be the flash NOT the flash/object folder.
lab1 = '176'
filename = 'flash' # 'flash' for flash.dat
nHorizontal = 1 # number of Plots in Horizontal Direction. Vertical Direction is set by program.
outputFilename = 'QuantityPlots_Nuclear.png'
variables = [NUCLEAR_ENERGY]
#Adjustments to set the size
nVertical = math.ceil(float(len(variables))/nHorizontal) # = 6 for 16 = len(variables) & nHorizontal = 3.
F = plt.gcf() #get figure
DPI = F.get_dpi()
DefaultSize = F.get_size_inches()
F.set_size_inches(DefaultSize[0]*nHorizontal, DefaultSize[1]*nVertical) #build no of subplots in figure
variables.insert(0,TIME) # time as needed as well
data1 = getQuantity(flashFolder1, filename, variables)
time1 = np.array(data1[0]) #time is first column
for n in [n+1 for n in range(len(variables)-1)]: #starts at 1
ax=plt.subplot(nVertical, nHorizontal, n) #for example (6,3,0 to 15) inside loop for 16 variables
if (min(data1[n])<0.0 or abs((min(data1[n]))/(max(data1[n])))>=1.e-2):
plt.plot(time1, data1[n],label=lab1) #, label = labels[variables[n]])
legend = ax.legend(loc='upper right', frameon=False)
else:
plt.semilogy(time1, data1[n],label=lab1) #, label = labels[variables[n]])
legend = ax.legend(loc='upper right', frameon=False)
plt.savefig(outputFilename)
Hier ist die Figur, die ich aus diesem Code erzeugen kann:
und für Ihre Bequemlichkeit teile ich auch die .dat
Datei:
https://www.dropbox.com/s/w4jbxmln9e83355/flash.dat?dl=0
Ihre Vorschläge werden am meisten geschätzt.
ich nicht 'Nuclear Energy' Spalte finden konnte ... Welche Spalte sehen Sie zeichnen möchten? – MaxU
diese Spalte ist die 19. in .DAT-Datei, mit dem Namen "Inkrement" – bhjghjh
Jeder Grund, warum Sie nicht 'Pandas' verwenden? Dies ist eine dieser Situationen, in denen es Ihr Leben viel einfacher machen kann. –