我似乎无法巧妙地显示多个图表

I can't seem to get plotly to display multiple graphs

我想在 python 中创建一个漂亮的图表,所以我使用 plotly 来创建图表,但出现错误。

可能因为我是plotly的新手,我不明白这段代码中的错误。
我唯一能说的是我的代码是错误的。
我想在 plotly 中显示多个图形。

fig = make_subplots(rows=math.ceil(len(file_names)/3),cols=3)

for j in range(len(file_names)):
    df_inst = df_list[j][df_list[j]["species"] == species_list[int(10)]] 

    fig.append_trace(
        px.scatter(
            x=df_inst[" VG"],
            y=df_inst[" ID"],
        ), row=1 + int(j / 3), col=1 + j % 3
    )
    fig.update_xaxes(type='linear' if xaxis_type == 'Linear' else 'log', 
                     row=1 + int(j / 3), col=1 + j % 3)

    fig.update_yaxes(type='linear' if yaxis_type == 'Linear' else 'log',
                     row=1 + int(j / 3), col=1 + j % 3)
    
fig.show()

错误消息。

ValueError: 
    Invalid element(s) received for the 'data' property of 
        Invalid elements include: [Figure({
    'data': [{'hovertemplate': 'x=%{x}<br>y=%{y}<extra></extra>',
              'legendgroup': '',
              'marker': {'color': '#636efa', 'symbol': 'circle'},
              'mode': 'markers',
              'name': '',
              'orientation': 'v',
              'showlegend': False,
              'type': 'scatter',
              'x': array([-0.5  , -0.498, -0.496, ...,  0.996,  0.998,  1.   ]),
              'xaxis': 'x',
              'y': array([ 1.8000e-13,  1.0200e-12, -1.6700e-12, ...,  1.5398e-06,  1.5725e-06,
                           1.5883e-06]),
              'yaxis': 'y'}],
    'layout': {'legend': {'tracegroupgap': 0},
               'margin': {'t': 60},
               'template': '...',
               'xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'title': {'text': 'x'}},
               'yaxis': {'anchor': 'x', 'domain': [0.0, 1.0], 'title': {'text': 'y'}}}
})]

    The 'data' property is a tuple of trace instances
    that may be specified as:
      - A list or tuple of trace instances
        (e.g. [Scatter(...), Bar(...)])
      - A single trace instance
        (e.g. Scatter(...), Bar(...), etc.)
      - A list or tuple of dicts of string/value properties where:
        - The 'type' property specifies the trace type
            One of: ['area', 'bar', 'barpolar', 'box',
                     'candlestick', 'carpet', 'choropleth',
                     'choroplethmapbox', 'cone', 'contour',
                     'contourcarpet', 'densitymapbox', 'funnel',
                     'funnelarea', 'heatmap', 'heatmapgl',
                     'histogram', 'histogram2d',
                     'histogram2dcontour', 'image', 'indicator',
                     'isosurface', 'mesh3d', 'ohlc', 'parcats',
                     'parcoords', 'pie', 'pointcloud', 'sankey',
                     'scatter', 'scatter3d', 'scattercarpet',
                     'scattergeo', 'scattergl', 'scattermapbox',
                     'scatterpolar', 'scatterpolargl',
                     'scatterternary', 'splom', 'streamtube',
                     'sunburst', 'surface', 'table', 'treemap',
                     'violin', 'volume', 'waterfall']

        - All remaining properties are passed to the constructor of
          the specified trace type

        (e.g. [{'type': 'scatter', ...}, {'type': 'bar, ...}])

感谢您的阅读。

根据the documentation on adding traces to subplotsadd_traceappend_trace方法只接受情节graph_objects。因此,您的代码块:

fig.append_trace(
    px.scatter(
        x=df_inst[" VG"],
        y=df_inst[" ID"],
    ), row=1 + int(j / 3), col=1 + j % 3
)

... 应更改为以下内容:

fig.append_trace(
    go.Scatter(
        x=df_inst[" VG"],
        y=df_inst[" ID"],
    ), row=1 + int(j / 3), col=1 + j % 3
)

这是一个示例,我们可以在不同的子图上绘制一些随机生成的 DataFrame,一次添加一个 Scatter graph_objects append_trace:

import numpy as np
import pandas as pd
from plotly.subplots import make_subplots
import plotly.express as px
import plotly.graph_objects as go

np.random.seed(42)

df = pd.DataFrame(np.random.randint(0,100,size=(5, 2)), columns=list('AB'))

fig = make_subplots(rows=2,cols=1)
for row_idx, col_name in enumerate(df.columns):

    ## using px.scatter throws the same ValueError: 
    ## Invalid element(s) received for the 'data' property

    fig.append_trace(
        go.Scatter(
            x=list(range(5)),
            y=df[col_name]
        ),
        row=row_idx+1,col=1
    )
fig.show()