Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 22 additions & 12 deletions src/Visualizer/keywords/keywords.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')
import matplotlib.dates as mdates
import random

from ..utils.enums import GraphColor
Expand Down Expand Up @@ -50,10 +49,8 @@ def end_test(self, data, result):

def _get_csv_as_pandas(self, csv_data: str, usecols = None) -> DataFrame:
if isinstance(csv_data, str) and os.path.isfile(csv_data):
# csv_data is a file path
return pd.read_csv(csv_data, usecols=usecols)
elif isinstance(csv_data, str):
# csv_data is a csv string
csv_buffer = StringIO(csv_data)
return pd.read_csv(csv_buffer, usecols=usecols)
else:
Expand All @@ -67,6 +64,19 @@ def _validate_columns(self, csv_data: DataFrame, x_axis: str, *y_axis: str):
if col not in csv_data.columns:
raise ValueError(f"Column '{col}' not found in CSV!")

def _convert_timestamp(
self,
csv_data: DataFrame,
):
""" Convert timestamp into readable datetime format."""
try:
dt = pd.to_datetime(csv_data, unit='ms')
if (dt.dt.year < 1971).any():
raise ValueError
return dt
except Exception:
return pd.to_datetime(csv_data, unit='s')

def _cleanup(self):
self.graph_data.clear()
self.diagram_name = None
Expand Down Expand Up @@ -107,16 +117,15 @@ def add_to_diagramm(
= Example =
| Add To Diagram csv_file_path.csv _time_header _value_header Your Graph Name Green
"""

# Einlesen der CSV mit nur den benötigten Spalten
# Read CSV data into a pandas DataFrame
df = self._get_csv_as_pandas(csv_data, usecols=[csv_header_x_axis, csv_header_y_axis])
self._validate_columns(df, csv_header_x_axis, csv_header_y_axis)

# X-Achse als Zeit formatieren
df[csv_header_x_axis] = pd.to_datetime(df[csv_header_x_axis], format="mixed")
df = df.sort_values(by=csv_header_x_axis)
# If x-axis is a timestamp in milliseconds or seconds, convert it to a readable format
if df[csv_header_x_axis].astype(str).str.fullmatch(r"\d{10}|\d{13}").all():
df[csv_header_x_axis] = self._convert_timestamp(df[csv_header_x_axis])

# Zwischenspeichern
# Add data to internal graph data list
self.graph_data.append({
"df": df,
"x_axis": csv_header_x_axis,
Expand Down Expand Up @@ -222,19 +231,20 @@ def visualize(

# Plot given data fron entry list
for entry in self.graph_data:
df = entry["df"]
df = DataFrame(entry["df"])
x = entry["x_axis"]
y = entry["y_axis"]
color = entry["color"]
df[x] = pd.to_datetime(df[x], errors="coerce")
df.plot(x=x, y=y, ax=ax, label=entry['graph_name'], color=color)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%Y %H:%M'))
fig.autofmt_xdate()

plt.xlabel(self.graph_data[0]["x_axis"])
plt.ylabel("Value(s)")
plt.legend()
plt.tight_layout(rect=[0, 0, 1, 0.95])
# Save plot to PNG file
plt.savefig(full_file_path, format='png')
plt.close(fig)

# Reset internal data cache for each diagram
self.graph_data.clear()
Expand Down
34 changes: 21 additions & 13 deletions tests/atest/generic.robot
Original file line number Diff line number Diff line change
Expand Up @@ -5,45 +5,53 @@ Library Visualizer
*** Test Cases ***
Add One Data Set
[Documentation] Add one graph to diagram.
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _strom Strom Blue
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _strom Strom Blue
Visualizer.Visualize Strom / Spannung Verlauf

Add Two Data Sets
[Documentation] Add two graphs to diagram.
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _strom Strom Blue
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _strom Strom Blue
Visualizer.Visualize Strom / Spannung Verlauf

Modify Graph Metadata
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _spannung Spannung Green
Visualizer.Modify Graph Metadata Spannung x_axis=_time y_axis=_spannung color=Red
Visualizer.Visualize Strom / Spannung Verlauf

Delete from Diagram
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _strom Strom Blue
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _strom Strom Blue
Visualizer.Remove From Diagram Strom
Visualizer.Visualize Strom / Spannung Verlauf

Reset Data Object
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _strom Strom Blue
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _strom Strom Blue
Visualizer.Reset
BuiltIn.Run Keyword And Expect Error REGEXP: ValueError.*
... Visualizer.Visualize Strom / Spannung Verlauf

Multiple Diagrams in One Test Case
GROUP Diagram 01
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _strom Strom Blue
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _strom Strom Blue
Visualizer.Visualize Diagram 1
END
GROUP Diagram 02
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _spannung Spannung Green
Visualizer.Visualize Diagram 2
END
GROUP Diagram 03
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}dummy_strom_spannung.csv _time _strom Strom Blue
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _spannung Spannung Green
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_voltage_current.csv _time _strom Strom Blue
Visualizer.Visualize Diagram 3
END

Create Diagram from Big Data CSV
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}csv_big_data.csv _time _spannung Spannung Orange
Visualizer.Visualize Spannung Big Data

Create Diagram from Timestamps
Visualizer.Add To Diagramm ${CURDIR}${/}testdata${/}measurements_with_timestamps.csv _time _spannung Spannung Orange
Visualizer.Visualize Spannung Big Data
Loading