问题描述
我想用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 subplots,add_trace
和append_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()