Spaces:
Sleeping
Sleeping
import pandas as pd | |
import matplotlib.pyplot as plt | |
import os | |
import matplotlib as mpl | |
import numpy as np | |
# Die Milltap hatte einen globalen Fehler von 20 µm. Dieser muss von den Messwerten abgezogen werden. | |
offset = 0 | |
def preprocess_data(csv, x_set): | |
df = pd.read_csv(csv, sep=",", encoding="utf-16", header=None) | |
df.columns = ['x', 'y', 'z'] | |
# slicing | |
df = df.iloc[:16000] | |
df = df[(df['y'] > -31) & (df['y'] < -2)] | |
df = df[(df['x'] > -5.5) & (df['x'] < 5.5)] | |
# transform x, y, z | |
df["x"] = df["x"] +7.5 # in the raw data, X = 0 is in the middle of the workpiece-width. Shift X to the left by 7.5 mm to have X = 0 at the left edge of the workpiece. | |
df["y"] = df["y"] * (-1) # flip the y-axis | |
df['z'] = df['z'] - (1.5 + offset) # the radius of the tip of the measuring device is 1.5 mm and needs to be substracted from z | |
# These are the constant X values for the slicing, where the measuring probe actually moves along the y-axis: | |
x_values = [2.4, 3, 3.6, 4.2, 4.8, 5.4, 6, 6.6, 7.2, 7.8, 8.4, 9, 9.6, 10.2, 10.8, 11.4, 12, 12.6] | |
tol = 0.1 | |
i = 0 | |
x_value = x_values[x_set] | |
data = df[(df['x'] > x_value-tol) & (df['x'] < x_value+tol)] | |
fivetothirty = data[data['y'] > 5] | |
fivetothirty = fivetothirty[0:500] | |
return data, x_value, fivetothirty | |
def plot_timeseries(csv, x_set): | |
data, x_value, fivetothirty = preprocess_data(csv, x_set) | |
x = data["y"] | |
y = data["z"] | |
fig, ax = plt.subplots(figsize=(8, 4)) | |
ax.set_ylim(3.23, 3.275) | |
ax.set_xlim(2, 31) | |
mpl.rcParams['font.family'] = 'Arial' | |
mpl.rcParams['font.size'] = 30 | |
ax.set_xlabel("Bauteillänge [mm]", fontname="Arial", fontsize=16, labelpad=7) | |
ax.set_ylabel("Bauteilhöhe Z [mm]", fontname="Arial", fontsize=16, labelpad=7) | |
plt.yticks(np.arange(3.23, 3.271, step=0.01), fontname="Arial", fontsize=14, color="black") | |
plt.xticks(range(5, 31, 5), fontname="Arial", fontsize=14, color = "black") | |
""" | |
xticks = ax.get_xticks() | |
xticklabels = [str(int(x)) if x != xticks[-2] else "mm" for x in xticks] | |
ax.set_xticklabels(xticklabels) | |
""" | |
plt.title("Oberfläche bei X = {} mm".format(x_value),fontname="Arial", fontsize=18, color="black", weight="bold", pad=10) | |
gridwidth = 1.5 | |
plt.grid(axis="y", linewidth=0.75, color="black") | |
plt.grid(axis="x", linewidth=0.75, color="black") | |
rand = ["top", "right", "bottom", "left"] | |
for i in rand: | |
plt.gca().spines[i].set_linewidth(gridwidth) | |
ax.spines[i].set_color('black') | |
plt.plot(x, y, color="#00509b", linewidth=1.5) | |
tolerance = 0.012 | |
# Define the tolerance range | |
tolerance_lower = 3.25-tolerance | |
tolerance_upper = 3.25+tolerance | |
ax.fill_between(x, tolerance_lower, tolerance_upper, color='gray', alpha=0.1) | |
# Check if the plot is within tolerance | |
within_tolerance = all(tolerance_lower <= val <= tolerance_upper for val in y) | |
tolerance = None | |
if within_tolerance: | |
tolerance = True | |
else: | |
tolerance = False | |
return fig, tolerance, y, fivetothirty | |