Python Plotly:如何使用数据帧作为源按行填充表格
我有这个df:vertical_stack=pd.concat([eu_table,us_table],axis=0): 我想像上面一样,按行创建一个表,但我只能垂直填充表,其中“EU value”变成一列,它的所有值都垂直填充。这就是我使用的:Python Plotly:如何使用数据帧作为源按行填充表格,python,plotly,plotly-dash,Python,Plotly,Plotly Dash,我有这个df:vertical_stack=pd.concat([eu_table,us_table],axis=0): 我想像上面一样,按行创建一个表,但我只能垂直填充表,其中“EU value”变成一列,它的所有值都垂直填充。这就是我使用的: fig3 = go.Figure(data=[go.Table(header=dict(values=['','Sept. 19', 'Oct. 19', 'Nov. 19', 'Dec. 19', 'Jan. 20', 'Feb. 20',
fig3 = go.Figure(data=[go.Table(header=dict(values=['','Sept. 19', 'Oct. 19', 'Nov. 19', 'Dec. 19', 'Jan. 20', 'Feb. 20', 'Mar. 20',
'Apr. 20', 'May 20', 'Jun. 20', 'Jul. 20', 'Aug. 20']),
cells=dict(values=[vertical_stack])
)])
这是我的输出:
正如您所看到的,所有的值都填充在同一个单元格中。我不确定是什么原因导致了这里的错误,但我可以向您展示如何用pandas数据框构建一个表,如下所示:
0 1 2 3 4 5 6 7 8 9 10 11
EU value 21 13 9 11 15 9 8 11 11 20 19 6
USA value 17 28 14 18 16 11 25 26 22 27 25 17
既然您已经标记了您的问题,但在您的示例中仅使用了pure-plotly,我还可以在两个单独的部分中为这两种方法提供建议
第1部分-绘图和图形对象
使用df=pd.read_剪贴板(sep='\\s+')
和df.to_dict()
将让您构建如下可复制的数据帧:
df = pd.DataFrame({'0': {'EU value': 21, 'USA value': 17},
'1': {'EU value': 13, 'USA value': 28},
'2': {'EU value': 9, 'USA value': 14},
'3': {'EU value': 11, 'USA value': 18},
'4': {'EU value': 15, 'USA value': 16},
'5': {'EU value': 9, 'USA value': 11},
'6': {'EU value': 8, 'USA value': 25},
'7': {'EU value': 11, 'USA value': 26},
'8': {'EU value': 11, 'USA value': 22},
'9': {'EU value': 20, 'USA value': 27},
'10': {'EU value': 19, 'USA value': 25},
'11': {'EU value': 6, 'USA value': 17}})
这个数据样本更实用一些。
无论是逐行还是逐列向表中添加数据,这都不重要。对于您的示例,结果应该是相同的。如果以下建议不适用于您的实际用例,那么请告诉我,我们可以讨论选项
下面的代码段将使用go.figure()
和go.Table()
生成下图
表1
完整的绘图代码
第2部分-使用JupyterDash绘制破折号
下面的代码段将使用以下内容生成下表:
dash_table.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in df.columns],
data=df.to_dict('records')
表1
JupyterDash的完整代码
这对我很有用:
df=pd.read\u csv(
'https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
#普洛特利简单表
图=go.图(数据=[go.Table(
header=dict(value=df.columns.tolist()),
单元格=dict(值=df.to_numpy().T.tolist())
)])
参考:
非常感谢您的详尽回答。由于我的df(我认为这就是问题所在),我能够以不同的方式完成它,包括plotly和dash。但我也要你的版本。我不得不将我的df调换,并将不同的行连接在一起,我认为这把整个事情搞砸了。@Steven谢谢你的反馈。很高兴你成功了!
import plotly.graph_objects as go
import pandas as pd
df = pd.DataFrame({'0': {'EU value': 21, 'USA value': 17},
'1': {'EU value': 13, 'USA value': 28},
'2': {'EU value': 9, 'USA value': 14},
'3': {'EU value': 11, 'USA value': 18},
'4': {'EU value': 15, 'USA value': 16},
'5': {'EU value': 9, 'USA value': 11},
'6': {'EU value': 8, 'USA value': 25},
'7': {'EU value': 11, 'USA value': 26},
'8': {'EU value': 11, 'USA value': 22},
'9': {'EU value': 20, 'USA value': 27},
'10': {'EU value': 19, 'USA value': 25},
'11': {'EU value': 6, 'USA value': 17}})
df.reset_index(inplace=True)
df.rename(columns={'index':''}, inplace = True)
fig = go.Figure(data=[go.Table(
header=dict(values=list(df.columns),
fill_color='paleturquoise',
align='left'),
cells=dict(values=[df[col] for col in df.columns],
fill_color='lavender',
align='left'))
])
fig.show()
dash_table.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in df.columns],
data=df.to_dict('records')
from jupyter_dash import JupyterDash
import dash_table
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
df = pd.DataFrame({'0': {'EU_value': 21, 'USA_value': 17},
'1': {'EU_value': 13, 'USA_value': 28},
'2': {'EU_value': 9, 'USA_value': 14},
'3': {'EU_value': 11, 'USA_value': 18},
'4': {'EU_value': 15, 'USA_value': 16},
'5': {'EU_value': 9, 'USA_value': 11},
'6': {'EU_value': 8, 'USA_value': 25},
'7': {'EU_value': 11, 'USA_value': 26},
'8': {'EU_value': 11, 'USA_value': 22},
'9': {'EU_value': 20, 'USA_value': 27},
'10': {'EU_value': 19, 'USA_value': 25},
'11': {'EU_value': 6, 'USA_value': 17}})
df.reset_index(inplace=True)
df.rename(columns={'index':''}, inplace = True)
app = JupyterDash(__name__)
app.layout = dash_table.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in df.columns],
data=df.to_dict('records'),
)
app.run_server(mode='inline', port = 8070, dev_tools_ui=True,
dev_tools_hot_reload =True, threaded=True)