Reputation: 45
Data were converted using Python dictionary according to Create a new table in Python user titusarmah99 https://stackoverflow.com/users/8363478/titusarmah99
import datetime
import numpy as np
import seaborn as sb
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use("ggplot")
%matplotlib inline
%config InlineBackend.figure_format='svg'}
Reading the Sandvik.log and Iscar.log files.
data=[]
with open('Sandvik.log','r') as file:
for row in file:
data.append(row.rstrip('\n').split('|'))
columns =['DateTime','Xload']
data_dic = []
for row in data:
tmp ={}
tmp['DateTime']=row[0]
for i in range(1,len(row)-1):
if row[i] in columns:
tmp[row[i]]=row[i+1]
for c in columns:
if c not in tmp:
tmp[c] = '' #for rows which donot have the property
data_dic.append(tmp)
dfs = pd.DataFrame(data_dic)
print (dfs.dtypes)
# Reading Iscar.log
data=[]
with open('Iscar.log','r') as file:
for row in file:
data.append(row.rstrip('\n').split('|'))
columns =['DateTime','Xload']
data_dic = []
for row in data:
tmp ={}
tmp['DateTime']=row[0]
for i in range(1,len(row)-1):
if row[i] in columns:
tmp[row[i]]=row[i+1]
for c in columns:
if c not in tmp:
tmp[c] = '' #for rows which donot have the property
data_dic.append(tmp)
dfi = pd.DataFrame(data_dic)
print (dfi.dtypes)
# Converting the Xload and Datetime variables
dfs['Xload']=pd.to_numeric(dfs.Xload)
dfs['DateTime']= pd.to_datetime(dfs['DateTime'])
dfi['Xload']=pd.to_numeric(dfi.Xload)
dfi['DateTime']= pd.to_datetime(dfi['DateTime'])
# removing null data
dfs.dropna(inplace=True)
dfi.dropna(inplace=True)
# Reset the DataFrame
dfs.reset_index(drop=True, inplace=True)
dfi.reset_index(drop=True, inplace=True)
Graphing the Xload variable for the Sandvik DataFrame.
dfs.plot('DateTime', color = "red", figsize = (8, 6))
plt.ylim(0,100) # scale up to 100% for Y axis
# creating subtitles
plt.legend(['Sandvik'], loc='upper left')
plt.title("Machining Time vs. Xload Power")
plt.xlabel("Machining Time")
plt.ylabel("% in Xload variable")
Graphing the Xload variable for the Iscar DataFrame
dfi.plot('DateTime', color = "royalblue", figsize = (8, 6))
plt.ylim(0,100)
# creating subtitles
plt.legend(['Iscar'], loc='upper left')
plt.title("Machining Time vs Xload Power")
plt.xlabel("Machining Time")
plt.ylabel("% in Xload variable")
I cannot scale the hour, minute and second to the "X" axis after joining both graphs.
plt.figure(figsize = (10, 6))
for frame in [dfs, dfi]:
plt.plot(frame['Xload'])
#plt.xlim()
plt.ylim(0,100)
# Criando as legendas
plt.legend(['Sandvik', 'Iscar'], shadow=True, loc='upper left')
plt.title("Machining Time vs Xload Power")
plt.xlabel("Machining Time")
plt.ylabel("% in Xload variable")
I will only use the scale in seconds dt.strftime ('% S'). I need to overlay the graphs (Sandvik and Iscar) and change the ordered X-axis scale every 5 seconds.
dfs['DateTime'] = dfs['DateTime'].dt.strftime('%S')
dfi['DateTime'] = dfi['DateTime'].dt.strftime('%S')
# overlapping graphics
plt.figure(figsize = (10, 4))
for frame in [dfs, dfi]:
plt.plot(frame['Xload'])
plt.legend(['Sandvik', 'Iscar'], loc='upper left') #plot da legend
#plt.xlim()
plt.ylim(0,100)
# using seaborn
x1 = dfs['DateTime']
x2 = dfi['DateTime']
y1 = dfs['Xload']
y2 = dfi['Xload']
f, (ax1, ax2) = plt.subplots(ncols=2, nrows=1, sharey=True, figsize=(10,4))
ax = sns.lineplot(x=x1, y=y1, ax=ax1, color='blue', label='Sardvik', ci=None)
ax = sns.lineplot(x=x2, y=y2, ax=ax2, color='red', label='Iscar', ci=None)
ax1.set_xlim(min(x1), max(x1))
ax2.set_xlim(min(x2), max(x2))
ax1.set_xlabel('Machine Time')
ax2.set_xlabel('Machine Time')
ax1.set_ylabel('% in Xload variable')
ax1.set_xticks(ax1.get_xticks()[::5])
ax2.set_xticks(ax2.get_xticks()[::5])
plt.setp( ax1.xaxis.get_majorticklabels(), rotation=90 )
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=90 )
Upvotes: 2
Views: 4737
Reputation: 867
Please edit the question for adding more information. Try not to post it as answers.
As you may have noticed, the timestamps in Sardvik.log
and Iscar.log
used for plotting are around 10 minutes apart from each other.
plt.figure(figsize = (20, 6))
for frame in [dfs, dfi]:
plt.plot(frame['DateTime'],frame['Xload'])
#plt.xlim()
plt.ylim(0,100)
# Criando as legendas
plt.legend(['Sandvik', 'Iscar'], shadow=True, loc='upper left')
plt.title("Machining Time vs Xload Power")
plt.xlabel("Machining Time")
plt.ylabel("% in Xload variable")
Above code yeilds which preserves the timestamps but doesn't look good.
If this solves the problem then its great, but just for sake of better visualization, you can plot them as subplot (see example) or broken axes using seaborn.
# adding these two lines before removing null
dfs['DateTime'] = dfs['DateTime'].dt.strftime('%H:%M:%S.%f')
dfi['DateTime'] = dfi['DateTime'].dt.strftime('%H:%M:%S.%f')
# using seaborn
x1 = dfs['DateTime']
x2 = dfi['DateTime']
y1 = dfs['Xload']
y2 = dfi['Xload']
f, (ax1, ax2) = plt.subplots(ncols=2, nrows=1, sharey=True, figsize=(10,6))
ax = sns.lineplot(x=x1, y=y1, ax=ax1, color='blue', label='Sardvik', ci=None)
ax = sns.lineplot(x=x2, y=y2, ax=ax2, color='red', label='Iscar', ci=None)
ax1.set_xlim(min(x1), max(x1))
ax2.set_xlim(min(x2), max(x2))
ax1.set_xlabel('Machine Time')
ax2.set_xlabel('Machine Time')
ax1.set_ylabel('% in Xload variable')
ax1.set_xticks(ax1.get_xticks()[::10])
ax2.set_xticks(ax2.get_xticks()[::10])
plt.setp( ax1.xaxis.get_majorticklabels(), rotation=70 )
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=70 )
f.suptitle('Machining Time vs Xload Power')
plt.subplots_adjust(wspace=.01, hspace=0)
Upvotes: 1