散点图与 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"])
我正在尝试在 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"])