mirror of https://gitlab.com/pamhyr/pamhyr2
Pamhyr: Change time edition and plot display (exp BC).
parent
5226836211
commit
065e1f063f
|
|
@ -4,7 +4,7 @@ PyQt5-sip==12.12.2
|
||||||
PyQtWebEngine==5.15.6
|
PyQtWebEngine==5.15.6
|
||||||
QScintilla>=2.14.1
|
QScintilla>=2.14.1
|
||||||
pyqtgraph>=0.12.1
|
pyqtgraph>=0.12.1
|
||||||
matplotlib>=3.4.1
|
matplotlib>=3.7.1
|
||||||
numpy>=1.24.2
|
numpy>=1.24.2
|
||||||
colorama>=0.4.3
|
colorama>=0.4.3
|
||||||
pyinstaller>=5.11.0
|
pyinstaller>=5.11.0
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ PyQt5-sip==12.12.2
|
||||||
#PyQtWebEngine==5.15.6
|
#PyQtWebEngine==5.15.6
|
||||||
QScintilla>=2.14.1
|
QScintilla>=2.14.1
|
||||||
pyqtgraph>=0.12.1
|
pyqtgraph>=0.12.1
|
||||||
matplotlib>=3.4.1
|
matplotlib>=3.7.1
|
||||||
numpy>=1.24.2
|
numpy>=1.24.2
|
||||||
colorama>=0.4.3
|
colorama>=0.4.3
|
||||||
pyinstaller>=5.11.0
|
pyinstaller>=5.11.0
|
||||||
|
|
|
||||||
|
|
@ -47,99 +47,59 @@ class Plot(PamhyrPlot):
|
||||||
)
|
)
|
||||||
|
|
||||||
self._table_headers = self._trad.get_dict("table_headers")
|
self._table_headers = self._trad.get_dict("table_headers")
|
||||||
|
|
||||||
|
header = self.data.header
|
||||||
|
self.label_x = self._table_headers[header[0]]
|
||||||
|
self.label_y = self._table_headers[header[1]]
|
||||||
|
|
||||||
self._mode = mode
|
self._mode = mode
|
||||||
|
self._isometric_axis = False
|
||||||
|
|
||||||
|
|
||||||
def custom_ticks(self):
|
def custom_ticks(self):
|
||||||
if self.data.header[0] != "time":
|
if self.data.header[0] != "time":
|
||||||
return
|
return
|
||||||
|
|
||||||
t0 = datetime.fromtimestamp(0)
|
self.set_ticks_time_formater()
|
||||||
nb = len(self.data.data)
|
|
||||||
mod = int(nb / 5)
|
|
||||||
mod = mod if mod > 0 else nb
|
|
||||||
|
|
||||||
fx = list(
|
|
||||||
map(
|
|
||||||
lambda x: x[1],
|
|
||||||
filter(
|
|
||||||
lambda x: x[0] % mod == 0,
|
|
||||||
enumerate(self.data.data)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
xx = list(map(lambda v: v[0], fx))
|
|
||||||
if self._mode == "time":
|
|
||||||
xt = list(
|
|
||||||
map(
|
|
||||||
lambda v: str(
|
|
||||||
datetime.fromtimestamp(v[0]) - t0
|
|
||||||
).split(",")[0]
|
|
||||||
.replace("days", _translate("BoundaryCondition", "days"))
|
|
||||||
.replace("day", _translate("BoundaryCondition", "day")),
|
|
||||||
fx
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
xt = list(
|
|
||||||
map(
|
|
||||||
lambda v: str(datetime.fromtimestamp(v[0]).date()),
|
|
||||||
fx
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
self.canvas.axes.set_xticks(ticks=xx, labels=xt, rotation=45)
|
|
||||||
|
|
||||||
@timer
|
@timer
|
||||||
def draw(self):
|
def draw(self):
|
||||||
self.canvas.axes.cla()
|
self.init_axes()
|
||||||
self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
|
|
||||||
|
|
||||||
if len(self.data) == 0:
|
if len(self.data) == 0:
|
||||||
self._init = False
|
self._init = False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
self.draw_data()
|
||||||
|
self.custom_ticks()
|
||||||
|
|
||||||
|
self.idle()
|
||||||
|
self._init = True
|
||||||
|
|
||||||
|
def draw_data(self):
|
||||||
# Plot data
|
# Plot data
|
||||||
x = list(map(lambda v: v[0], self.data.data))
|
x = list(map(lambda v: v[0], self.data.data))
|
||||||
y = list(map(lambda v: v[1], self.data.data))
|
y = list(map(lambda v: v[1], self.data.data))
|
||||||
|
|
||||||
self._line, = self.canvas.axes.plot(
|
self._line, = self.canvas.axes.plot(
|
||||||
x, y,
|
x, y,
|
||||||
color='r', lw=1.,
|
color=self.color_plot,
|
||||||
markersize=5, marker='+',
|
**self.plot_default_kargs
|
||||||
picker=30,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
self.custom_ticks()
|
|
||||||
|
|
||||||
# Plot label
|
|
||||||
header = self.data.header
|
|
||||||
self.canvas.axes.set_xlabel(
|
|
||||||
self._table_headers[header[0]], color='black', fontsize=10
|
|
||||||
)
|
|
||||||
self.canvas.axes.set_ylabel(
|
|
||||||
self._table_headers[header[1]], color='black', fontsize=10
|
|
||||||
)
|
|
||||||
|
|
||||||
self.canvas.axes.autoscale_view(True, True, True)
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
|
||||||
# self.toolbar.update()
|
|
||||||
|
|
||||||
self._init = True
|
|
||||||
|
|
||||||
@timer
|
@timer
|
||||||
def update(self, ind=None):
|
def update(self, ind=None):
|
||||||
if not self._init:
|
if not self._init:
|
||||||
self.draw()
|
self.draw()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
self.update_data()
|
||||||
|
self.custom_ticks()
|
||||||
|
|
||||||
|
self.update_idle()
|
||||||
|
|
||||||
|
def update_data(self):
|
||||||
x = list(map(lambda v: v[0], self.data.data))
|
x = list(map(lambda v: v[0], self.data.data))
|
||||||
y = list(map(lambda v: v[1], self.data.data))
|
y = list(map(lambda v: v[1], self.data.data))
|
||||||
|
|
||||||
self._line.set_data(x, y)
|
self._line.set_data(x, y)
|
||||||
|
|
||||||
self.custom_ticks()
|
|
||||||
|
|
||||||
self.canvas.axes.relim()
|
|
||||||
self.canvas.axes.autoscale()
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,11 @@ import traceback
|
||||||
|
|
||||||
from datetime import date, time, datetime, timedelta
|
from datetime import date, time, datetime, timedelta
|
||||||
|
|
||||||
from tools import trace, timer
|
from tools import (
|
||||||
|
trace, timer,
|
||||||
|
timestamp_to_old_pamhyr_date,
|
||||||
|
old_pamhyr_date_to_timestamp
|
||||||
|
)
|
||||||
|
|
||||||
from View.Tools.PamhyrTable import PamhyrTableModel
|
from View.Tools.PamhyrTable import PamhyrTableModel
|
||||||
|
|
||||||
|
|
@ -70,9 +74,7 @@ class TableModel(PamhyrTableModel):
|
||||||
value = f"{v:.4f}"
|
value = f"{v:.4f}"
|
||||||
elif self._data.header[column] == "time":
|
elif self._data.header[column] == "time":
|
||||||
if self._opt_data == "time":
|
if self._opt_data == "time":
|
||||||
t0 = datetime.fromtimestamp(0)
|
value = timestamp_to_old_pamhyr_date(int(v))
|
||||||
t = datetime.fromtimestamp(v)
|
|
||||||
value = str(t - t0)
|
|
||||||
else:
|
else:
|
||||||
value = str(datetime.fromtimestamp(v))
|
value = str(datetime.fromtimestamp(v))
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,9 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import matplotlib.colors as mplcolors
|
import matplotlib.colors as mplcolors
|
||||||
|
from matplotlib import ticker
|
||||||
|
|
||||||
|
from tools import timestamp_to_old_pamhyr_date
|
||||||
|
|
||||||
from View.Tools.Plot.APlot import APlot
|
from View.Tools.Plot.APlot import APlot
|
||||||
from View.Tools.Plot.PamhyrCanvas import MplCanvas
|
from View.Tools.Plot.PamhyrCanvas import MplCanvas
|
||||||
|
|
@ -184,3 +187,13 @@ class PamhyrPlot(APlot):
|
||||||
def toolbar_update(self):
|
def toolbar_update(self):
|
||||||
if self._toolbar is not None:
|
if self._toolbar is not None:
|
||||||
self._toolbar.update()
|
self._toolbar.update()
|
||||||
|
|
||||||
|
def set_ticks_time_formater(self):
|
||||||
|
self.canvas.axes.xaxis.set_major_formatter(
|
||||||
|
lambda x, pos: timestamp_to_old_pamhyr_date(int(x))
|
||||||
|
)
|
||||||
|
|
||||||
|
self.canvas.axes.tick_params(
|
||||||
|
labelsize=9,
|
||||||
|
labelrotation=45
|
||||||
|
)
|
||||||
|
|
|
||||||
17
src/tools.py
17
src/tools.py
|
|
@ -21,7 +21,7 @@ import time
|
||||||
import logging
|
import logging
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from colorama import Fore
|
from colorama import Fore
|
||||||
|
|
@ -251,6 +251,21 @@ def old_pamhyr_date_to_timestamp(date: str):
|
||||||
return ts
|
return ts
|
||||||
|
|
||||||
|
|
||||||
|
def timestamp_to_old_pamhyr_date(time:int):
|
||||||
|
t0 = datetime.fromtimestamp(0)
|
||||||
|
t = datetime.fromtimestamp(time)
|
||||||
|
|
||||||
|
dt = t - t0
|
||||||
|
hours = dt.seconds // 3600
|
||||||
|
minutes = (dt.seconds % 3600) // 60
|
||||||
|
seconds = dt.seconds % 60
|
||||||
|
|
||||||
|
s = f"{dt.days:>3}:{hours:>2}:{minutes:>2}:{seconds:>2}"
|
||||||
|
s = s.replace(" ", "0")
|
||||||
|
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# COMMAND LINE PARSER #
|
# COMMAND LINE PARSER #
|
||||||
#######################
|
#######################
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue