ModuleNotFoundError: No module named 'plotly.validators.bar._xaxis' when using plotly

ModuleNotFoundError: No module named 'plotly.validators.bar._xaxis' when using plotly

我正在尝试使用 Plotly 库绘制图表。其中 x 轴是“间隔”,两个 y 轴是“y1-sum”和“y2-average”,但我得到的是低于错误。

错误:

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-418-27dc9ac84c2a> in <module>
      1 from plotly.subplots import make_subplots
      2 fig = make_subplots(specs=[[{"secondary_y": True}]])
----> 3 fig.add_trace(fig1.data[0], secondary_y=False)
      4 fig.add_trace(fig2.data[0], secondary_y=True)
      5 fig.update_layout(width=700, height=450, hovermode='x')
 
ModuleNotFoundError: No module named 'plotly.validators.bar._xaxis'

我使用的代码如下

import numpy as np
import pandas as pd
import plotly.graph_objects as go

df1 = pd.read_csv('C:/Users/Desktop/y1_data.csv')
df2 = pd.read_csv('C:/Users/Desktop/y2_data.csv')

fig1 =go.Figure([go.Bar(x=df2['Interval'], y=df1['sum'], name='iops')])
fig2 =go.Figure([go.Scatter(x=df2['Interval'], y=df2['Average'], name='latency')])

from plotly.subplots import make_subplots
fig = make_subplots(specs=[[{"secondary_y": True}]])
fig.add_trace(fig1.data[0], secondary_y=False)
fig.add_trace(fig2.data[0], secondary_y=True)
fig.update_layout(width=700, height=450, hovermode='x')
fig.show()

需要像上面那样的图表。 sample_data_iops sample_data_lat

目前正在使用 Plotly 4.x 版本。谁能告诉我如何做到这一点?

我创建了以下代码,因为您的问题是要在一张图中绘制两个轴,而不是在多个图中绘制。我没有样本数据,所以我无法检查我的环境中的执行情况,但您可以同时指定图形和 y 轴。请参考this.

import numpy as np
import datetime
import pandas as pd
import plotly.graph_objects as go

df1 = pd.read_csv('C:/Users/Desktop/y1_data.csv')
df2 = pd.read_csv('C:/Users/Desktop/y2_data.csv')

fig = make_subplots(specs=[[{"secondary_y": True}]])

fig.add_trace(
    go.Bar(x=df2['Interval'], y=df1['sum'], name='io_rate data'),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=df2['Interval'], y=df2['Average'], name='latency data'),
    secondary_y=True,
)

fig.update_layout(width=700, height=450, hovermode='x')
    
fig.update_yaxes(title_text="<b>primary</b> io_rate", secondary_y=False)
fig.update_yaxes(title_text="<b>secondary</b> latency", secondary_y=True)
    
fig.show()