Question : Is it possible to do the strip with go.scatter ? If not, can you help me in transforming my code with px.strip function ?
Data generation :
import pandas as pd
import random
rows = []
for i in range(0, 130, 1):
rows.append([i+57, i+39585, [random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100)]])
df_test = pd.DataFrame(rows, columns=['Measure Number', 'Timer', 'Values'])
display(df_test)
rows2 = []
for i in range(70, 200, 1):
rows2.append([i+57, i+39585, [random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100)]])
df_test2 = pd.DataFrame(rows2, columns=['Measure Number', 'Timer', 'Values'])
display(df_test2)
rows3 = []
for i in range(170, 300, 1):
rows3.append([i+57, i+39585, [random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100)]])
df_test3 = pd.DataFrame(rows3, columns=['Measure Number', 'Timer', 'Values'])
display(df_test3)
Plotly plots :
from plotly.offline import init_notebook_mode, iplot
from plotly.graph_objs import *
import plotly.graph_objects as go
import plotly.express as px
init_notebook_mode(connected=True) # initiate notebook for offline plot
fig = go.Figure()
for i in range(0, 130, 1):
# Add traces
fig.add_trace(
go.Scatter(
x=[j for j in range(15)],
y=df_test['Values'][i],
mode="markers",
marker=dict(color="DarkOrange")
)
)
fig.add_trace(
go.Scatter(
x=[j for j in range(15)],
y=df_test2['Values'][i],
mode="markers",
marker=dict(color="Crimson")
)
)
fig.add_trace(
go.Scatter(
x=[j for j in range(15)],
y=df_test3['Values'][i],
mode="markers",
marker=dict(color="RebeccaPurple")
)
)
fig.show()
Plot output : (https://i.sstatic.net/65Mvr.png)
Image example to explain what I want : [From]2 [To]3
Source of the example : https://community.plotly.com/t/how-to-show-overlap-points-in-scatter-plot/24148/7
My approach was to check the structure of the example graphs in the reference, which can be found in fig.data. Next, I will add the px.strip configuration items from the boxplot example in the graph object. Simply put, we are just making the box color transparent on a boxplot with strip. I am creating the code with simplified data as your sample data was large and complex. To group them, see references.
import pandas as pd
import random
rows = []
for i in range(0, 20, 1):
rows.append([i+57, i+39585,
random.randint(1,100),
random.randint(1,100),
random.randint(1,100),
random.randint(1,100),
random.randint(1,100)])
cols = ['Col{}'.format(x) for x in range(5)]
df_test = pd.DataFrame(rows, columns=['Measure Number', 'Timer']+cols)
df_test.head()
Measure Number Timer Col0 Col1 Col2 Col3 Col4
0 57 39585 47 8 49 80 30
1 58 39586 64 74 12 73 46
2 59 39587 21 95 38 35 85
3 60 39588 50 7 100 30 82
4 61 39589 3 84 93 86 9
import plotly.graph_objects as go
import numpy as np
fig = go.Figure()
for i in df_test.columns[2:]:
fig.add_trace(go.Box(
y=df_test[i],
boxpoints='all',
hovertemplate='x=%{x}<br>y=%{y}<extra></extra>',
hoveron='points',
jitter=0.2,
pointpos=0,
fillcolor='rgba(255,255,255,0)',
line=dict(color='rgba(255,255,255,0)'),
marker=dict(color='#636efa'),
alignmentgroup=True,
showlegend=False)
)
fig.update_xaxes(tickvals=np.arange(0,5,1), ticktext=[str(x) for x in np.arange(0,5,1)])
fig.update_layout(height=500)
fig.show()