Python Plotly:如何使用数据帧作为源按行填充表格

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',

我有这个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', '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)