mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
Pamhyr: Change time edition and plot display (exp BC).
This commit is contained in:
1 parent
5226836211
commit
065e1f063f
6 files changed
+62
-72
No files matched your search
@@ -47,99 +47,59 @@ class Plot(PamhyrPlot):
|
||||
)
|
||||
|
||||
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._isometric_axis = False
|
||||
|
||||
|
||||
def custom_ticks(self):
|
||||
if self.data.header[0] != "time":
|
||||
return
|
||||
|
||||
t0 = datetime.fromtimestamp(0)
|
||||
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)
|
||||
self.set_ticks_time_formater()
|
||||
|
||||
@timer
|
||||
def draw(self):
|
||||
self.canvas.axes.cla()
|
||||
self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
|
||||
self.init_axes()
|
||||
|
||||
if len(self.data) == 0:
|
||||
self._init = False
|
||||
return
|
||||
|
||||
self.draw_data()
|
||||
self.custom_ticks()
|
||||
|
||||
self.idle()
|
||||
self._init = True
|
||||
|
||||
def draw_data(self):
|
||||
# Plot data
|
||||
x = list(map(lambda v: v[0], self.data.data))
|
||||
y = list(map(lambda v: v[1], self.data.data))
|
||||
|
||||
self._line, = self.canvas.axes.plot(
|
||||
x, y,
|
||||
color='r', lw=1.,
|
||||
markersize=5, marker='+',
|
||||
picker=30,
|
||||
color=self.color_plot,
|
||||
**self.plot_default_kargs
|
||||
)
|
||||
|
||||
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
|
||||
def update(self, ind=None):
|
||||
if not self._init:
|
||||
self.draw()
|
||||
return
|
||||
|
||||
self.update_data()
|
||||
self.custom_ticks()
|
||||
|
||||
self.update_idle()
|
||||
|
||||
def update_data(self):
|
||||
x = list(map(lambda v: v[0], self.data.data))
|
||||
y = list(map(lambda v: v[1], self.data.data))
|
||||
|
||||
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 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
|
||||
|
||||
@@ -70,9 +74,7 @@ class TableModel(PamhyrTableModel):
|
||||
value = f"{v:.4f}"
|
||||
elif self._data.header[column] == "time":
|
||||
if self._opt_data == "time":
|
||||
t0 = datetime.fromtimestamp(0)
|
||||
t = datetime.fromtimestamp(v)
|
||||
value = str(t - t0)
|
||||
value = timestamp_to_old_pamhyr_date(int(v))
|
||||
else:
|
||||
value = str(datetime.fromtimestamp(v))
|
||||
else:
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
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.PamhyrCanvas import MplCanvas
|
||||
@@ -184,3 +187,13 @@ class PamhyrPlot(APlot):
|
||||
def toolbar_update(self):
|
||||
if self._toolbar is not None:
|
||||
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
|
||||
)
|
||||
+16
-1
@@ -21,7 +21,7 @@ import time
|
||||
import logging
|
||||
import traceback
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
from colorama import Fore
|
||||
@@ -251,6 +251,21 @@ def old_pamhyr_date_to_timestamp(date: str):
|
||||
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 #
|
||||
#######################
|
||||
|
||||
Reference in new issue
Block a user