英文:
Plotly : Use px.strip in go.figure()
问题
问题: 是否可以使用go.scatter
实现散点图的叠加?如果不行,你能帮助我使用px.strip
函数来改变我的代码吗?
数据生成:
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图表:
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) # 初始化离线绘图的笔记本模式
fig = go.Figure()
for i in range(0, 130, 1):
# 添加图例
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()
示例来源:https://community.plotly.com/t/how-to-show-overlap-points-in-scatter-plot/24148/7
英文:
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.stack.imgur.com/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
答案1
得分: 0
我的方法是检查参考中的示例图表的结构,它可以在fig.data中找到。接下来,我将在图形对象中添加来自箱线图示例的px.strip配置项。简单来说,我们只是使带有分布条的箱线图的箱体颜色变为透明。我正在使用简化的数据创建代码,因为您的示例数据非常大且复杂。要对它们进行分组,请参考相关文档。
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()
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()
<details>
<summary>英文:</summary>
My approach was to check the structure of the [example graphs](https://plotly.com/python/strip-charts/) in the reference, which can be found in fig.data. Next, I will add the px.strip configuration items from the [boxplot example](https://plotly.com/python/box-plots/#box-plot-that-displays-the-underlying-data) 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()
[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/U2gcs.png
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论