{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/vnd.plotly.v1+html": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "from __future__ import division\n", "\n", "import numpy as np # For matrix manipulation\n", "import datetime # For convertim time to date\n", "\n", "import pandas as pd # Used for data handling and manipulation\n", "import matplotlib.pyplot as plt # Used for plotting spectrum\n", "import matplotlib.pylab as pylab # Used for increasing size of plot\n", "from mpl_toolkits.mplot3d import Axes3D # For 3 D plot\n", "\n", "import plotly \n", "from plotly import tools\n", "plotly.tools.set_credentials_file(username='rasp.pi.sensor', api_key='o6as73e2ve')\n", "import plotly.plotly as py # Plotly 3d plot\n", "import plotly.graph_objs as go # Plotly 3d plot\n", "\n", "# Plotly offline\n", "from plotly import __version__\n", "from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot\n", "init_notebook_mode(connected=True)\n", "\n", "import scipy.interpolate as interpolate # Interpolation\n", "import scipy.optimize as optimize # Finding intersections\n", "\n", "# For low pass filter\n", "from scipy.signal import butter, lfilter, freqz, filtfilt\n", "\n", "# Non-Linear Least-Squares Minimization and Curve-Fitting for Python\n", "from lmfit import minimize, Parameters, Model\n", "\n", "# For calculating uncertainties\n", "#from uncertainties import ufloat\n", "#from uncertainties.umath import *" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# READ DATA FROM CSV AND MAKE TIME COLUMN THE INDEX\n", "sample_freq = 60\n", "\n", "for i in range(1,6):\n", " globals()[\"p\"+str(i)] = pd.read_csv('p'+str(i)+'.csv')\n", " globals()[\"p\"+str(i)] = globals()[\"p\"+str(i)].set_index('Time')\n", "\n", "# Read body data \n", "body = pd.read_csv('body.csv')\n", "body = body.set_index('Time')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "data": [ { "marker": { "line": { "color": "rgba(217, 217, 217, 0.14)", "width": 0.5 }, "opacity": 0.8, "size": 6 }, "mode": "markers+text", "text": [ "p1", "p2", "p3", "p4", "p5(C)" ], "type": "scatter3d", "x": [ 599.629, 2820.8959999999997, 1297.55, 2180.3720000000003, 1643.545 ], "y": [ 2236.0370000000003, 2310.044, 2121.8320000000003, 2367.1710000000003, 2280.325 ], "z": [ 14.446, 26.469, 9.117, 14.459000000000001, 17.303 ] } ], "layout": { "margin": { "b": 0, "l": 0, "r": 0, "t": 0 }, "scene": { "xaxis": { "title": "X Axis [mm]" }, "yaxis": { "range": [ 1800, 3200 ], "title": "Y Axis [mm]" }, "zaxis": { "range": [ -100, 100 ], "title": "Z Axis [mm]" } }, "title": "Position of markers" } }, "text/html": [ "
" ], "text/vnd.plotly.v1+html": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# SHOW POSITIONS OF ACCELEROMETERS on ASV\n", "time = 20 # secs\n", "# Use time to obtain index using sampling freq of 60Hz (period = 1/60)\n", "t = round(time / 0.016667)\n", "\n", "xs = [p1.iloc[t].Pos_X, p2.iloc[t].Pos_X, p3.iloc[t].Pos_X, \n", " p4.iloc[t].Pos_X, p5.iloc[t].Pos_X]\n", "ys = [p1.iloc[t].Pos_Y, p2.iloc[t].Pos_Y, p3.iloc[t].Pos_Y, \n", " p4.iloc[t].Pos_Y, p5.iloc[t].Pos_Y]\n", "zs = [p1.iloc[t].Pos_Z, p2.iloc[t].Pos_Z, p3.iloc[t].Pos_Z,\n", " p4.iloc[t].Pos_Z, p5.iloc[t].Pos_Z]\n", "lbls = ['p1','p2','p3','p4','p5(C)']\n", "\n", "trace1 = go.Scatter3d(x=xs,y=ys,z=zs,text=lbls,mode='markers+text',\n", " marker=dict(size=6,\n", " line=dict(color='rgba(217, 217, 217, 0.14)',\n", " width=0.5),\n", " opacity=0.8))\n", "\n", "data = [trace1]\n", "layout = go.Layout(title = 'Position of markers',\n", " scene = dict(xaxis=dict(title = 'X Axis [mm]'),\n", " #range=[0,3000]),\n", " yaxis=dict(title = 'Y Axis [mm]',\n", " range=[1800,3200]),\n", " zaxis=dict(title = 'Z Axis [mm]',\n", " range=[-100,100])),\n", " margin=dict(l=0,r=0,b=0,t=0))\n", "\n", "fig = go.Figure(data=data, layout=layout)\n", "#py.iplot(fig, filename='simple-3d-scatter')\n", "plotly.offline.iplot(fig, filename='simple-3d-scatter')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "