散点图与 plotly vs pyplot/不同的数据方法 table 需要吗?

Scatterplot with plotly vs pyplot / different approach in data table needed?

我正在尝试在 plotly 中创建散点图,但遇到了一些困难。我想我需要重新排列我的数据 table 才能使用它,但我确定。

这是我的数据 table 的样子:

table structure

“平均价格”是“真实”数据,“预测”列中的价格是我的模型预测的价格。

我想在散点图中显示它,将预测价格和实际价格显示为点,如下所示:

scatterplot created through matplotlib

这个,我用pyplot创建的

plt.scatter(x_axis, result['Average Price'], label='Real')
plt.scatter(x_axis, result['Predictions'], label='Predictions')
plt.xlabel('YYY-MM-DD')
plt.ylabel('Average Price')
plt.legend(loc='lower right')
plt.show()

但是,我想对 plotly 做同样的事情,但我似乎无法弄清楚。我对一列没有问题,但不知道如何访问这两列。我是否需要重新排列 table 以便在一列中包含所有价格(预测的和实际的)以及将数据标记为“实际”或“预测”的附加列?

chart_model = px.scatter(result, x='YYYY-MM-DD', y='Predictions', title='Predictions')
chart_model.update_layout(title_x=0.5, plot_bgcolor='#ecf0f1', yaxis_title='Average Price Predicted',
                         font_color='#2c3e50')
chart_model.update_traces(marker=dict(color='blue'))

提前感谢您提供有关如何进行的任何提示!

  • 具有与您的问题结构相同的模拟数据框
  • 已使用 pandas melt() 将行重塑为长数据帧,然后使用 plotly[=26 即可轻松使用=]
import pandas as pd
import numpy as np
import plotly.express as px

# simulate data frame
df = pd.DataFrame(
    {
        "YYYY-MM-DD": pd.date_range("4-jan-2015", freq="7D", periods=300),
        "Average Price": np.random.uniform(1.2, 1.4, 300),
    }
).pipe(
    lambda d: d.assign(
        Predictions=d["Average Price"] * np.random.uniform(0.9, 1.1, 300)
    )
)

# simple inline restructure of data frame
px.scatter(df.set_index("YYYY-MM-DD").melt(ignore_index=False), y="value", color="variable")


候补

  • 只需将数据移动到索引中并定义要绘制的列
px.scatter(df.set_index("YYYY-MM-DD"), y=["Average Price", "Predictions"])