使用 Dash 和 Plotly 的多折线图
Multiple line charts using Dash and Plotly
我正在尝试创建多折线图,其中 X 轴上的 'Machine' 和 'Time' 各有一条线。但是我尝试了很多组合来生成 X 和 Y 标签。最接近我预期结果的是下面的图表。
- 欢迎大家提出建议。
这是数据框:
df3:
Machine Units Pruduced Time
K2K02 1900 15
K2K03 311 15
K2K01 5230 17
K2K02 1096 12
K2K03 1082 11
K2K07 587 17...
所以我正在分组和拆分以准备 df 来绘制图形。
fdr = dff3.groupby(['Time', 'Machine']).sum()
fdr2 = fdr.unstack('Time')
fdr2
这是我的代码:
import dash_table_experiments
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objects as go
import numpy as np
import dash_table_experiments as dash_table
import dash
from dash.dependencies import Input, Output
import dash_table
import pandas as pd
import plotly_express as px
import plotly.offline as pyo
dff3 = pd.read_csv('df3.csv', encoding='latin-1', low_memory=False)
dff3
fdr = dff3.groupby(['Time', 'Machine']).sum()
fdr2 = fdr.unstack('Time')
fdr2
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(
id = 'GrapGo',
figure = {
'data' : [
go.Scatter(
x = fdr2.index,
y = fdr2.loc[rowname],
mode = "markers+lines",
name = rowname
)for rowname in fdr2.index
],
'layout' : go.Layout(
title = "Grafico com go",
xaxis = {'title': 'X Label'},
yaxis = {'title': 'y Label'}
)
}
)
])
if __name__ == '__main__':
app.run_server()
这是我得到的图表:
预期结果是:
我在您的问题中没有看到需要 运行 服务器。如果您只需要制作一个情节,那么这段代码就可以完成工作(Dash v1.6.0):
import plotly.graph_objects as go
import pandas as pd
df = pd.DataFrame({'Machine': ['K2K01','K2K01','K2K01','K2K02','K2K02','K2K02','K2K03','K2K03','K2K03'],
'Units': [100,200,400,400,300,100,500,700,500],
'Time':[11,12,13,11,12,13,11,12,13]})
groups = df.groupby(by='Machine')
data = []
colors=['red', 'blue', 'green']
for group, dataframe in groups:
dataframe = dataframe.sort_values(by=['Time'])
trace = go.Scatter(x=dataframe.Time.tolist(),
y=dataframe.Units.tolist(),
marker=dict(color=colors[len(data)]),
name=group)
data.append(trace)
layout = go.Layout(xaxis={'title': 'Time'},
yaxis={'title': 'Produced Units'},
margin={'l': 40, 'b': 40, 't': 50, 'r': 50},
hovermode='closest')
figure = go.Figure(data=data, layout=layout)
figure.show()
我正在尝试创建多折线图,其中 X 轴上的 'Machine' 和 'Time' 各有一条线。但是我尝试了很多组合来生成 X 和 Y 标签。最接近我预期结果的是下面的图表。
- 欢迎大家提出建议。
这是数据框:
df3:
Machine Units Pruduced Time
K2K02 1900 15
K2K03 311 15
K2K01 5230 17
K2K02 1096 12
K2K03 1082 11
K2K07 587 17...
所以我正在分组和拆分以准备 df 来绘制图形。
fdr = dff3.groupby(['Time', 'Machine']).sum()
fdr2 = fdr.unstack('Time')
fdr2
这是我的代码:
import dash_table_experiments
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objects as go
import numpy as np
import dash_table_experiments as dash_table
import dash
from dash.dependencies import Input, Output
import dash_table
import pandas as pd
import plotly_express as px
import plotly.offline as pyo
dff3 = pd.read_csv('df3.csv', encoding='latin-1', low_memory=False)
dff3
fdr = dff3.groupby(['Time', 'Machine']).sum()
fdr2 = fdr.unstack('Time')
fdr2
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(
id = 'GrapGo',
figure = {
'data' : [
go.Scatter(
x = fdr2.index,
y = fdr2.loc[rowname],
mode = "markers+lines",
name = rowname
)for rowname in fdr2.index
],
'layout' : go.Layout(
title = "Grafico com go",
xaxis = {'title': 'X Label'},
yaxis = {'title': 'y Label'}
)
}
)
])
if __name__ == '__main__':
app.run_server()
这是我得到的图表:
预期结果是:
我在您的问题中没有看到需要 运行 服务器。如果您只需要制作一个情节,那么这段代码就可以完成工作(Dash v1.6.0):
import plotly.graph_objects as go
import pandas as pd
df = pd.DataFrame({'Machine': ['K2K01','K2K01','K2K01','K2K02','K2K02','K2K02','K2K03','K2K03','K2K03'],
'Units': [100,200,400,400,300,100,500,700,500],
'Time':[11,12,13,11,12,13,11,12,13]})
groups = df.groupby(by='Machine')
data = []
colors=['red', 'blue', 'green']
for group, dataframe in groups:
dataframe = dataframe.sort_values(by=['Time'])
trace = go.Scatter(x=dataframe.Time.tolist(),
y=dataframe.Units.tolist(),
marker=dict(color=colors[len(data)]),
name=group)
data.append(trace)
layout = go.Layout(xaxis={'title': 'Time'},
yaxis={'title': 'Produced Units'},
margin={'l': 40, 'b': 40, 't': 50, 'r': 50},
hovermode='closest')
figure = go.Figure(data=data, layout=layout)
figure.show()