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

问题描述

我想用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',col=1 + j % 3)

    fig.update_yaxes(type='linear' if yaxis_type == 'Linear' else 'log',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','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 方法仅采用accept plotly 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"],col=1 + j % 3
)

这是一个示例,我们可以在不同的子图上绘制一些随机生成的 DataFrame,并使用 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()

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...