这是我从下面的代码中获得的图形(这是一个更大的脚本的片段)
dataset = pd.read_csv('mon-ac-on-uni-on.csv')
print(dataset.columns)
X_test_mon = dataset[['Day', 'Month', 'Hour', 'AirConditioning', 'Temp','Humidity', 'Calender','Minute']]
y_test_mon = dataset.loc[:, 'AVG(totalRealPower)'].values
print(X_test_mon.columns)
y_pred_mon=regr.predict(X_test_mon)
plt.plot(y_test_mon, color = 'red', label = 'Real data')
plt.plot(y_pred_mon, color = 'blue', label = 'Predicted data')
plt.title('Random Forest Prediction- MONDAY- AC-ON-Uni-ON')
plt.legend()
plt.xlabel('Time')
plt.ylabel('Watt')
plt.show()
如您所见,它在x轴上具有行数,在y轴上具有以瓦特为单位的功率
现在我只想在x轴上有时间(小时)滴答声(8-17),而在y轴上只有KW的功率(即除以1000)。 为了实现这一目标,我尝试遵循
plt.xticks(X_test_mon['Hour'])
plt.yticks(np.round(y_test_mon/1000))
但是我得到的显示如下:两个轴上只有黑色正方形
我也尝试过
plt.xticks(range(8,17))
但没有变化。我在这里迷路了。请帮忙!
答案 0 :(得分:0)
据我所知,y_test_mon
和y_pred_mon
的结果是针对各自数据集的“索引”绘制的。从这行定义了X_test_mon
的那一行中,我怀疑绘图中每个数据点之间的最小时间步是1小时。
现在,将在整个监视时间范围内绘制该图。请尝试以下操作:
dates = X_test_mon.groupby(['Day','Month']).groups.keys()
for day, month in dates:
fig, ax = plt.subplots()
daily_avg_test_data = y_test_mon[(y_test_mon['Day'] == day) & (y_test_mon['Month'] == month)]
daily_avg_pred_data = y_pred_mon[(y_test_mon['Day'] == day) & (y_test_mon['Month'] == month)]
daily_avg_test_data.plot(x='Hour', y='AVG(totalRealPower)', ax=ax)
daily_avg_pred_data.plot(x='Hour', y='AVG(totalRealPower)', ax=ax)
plt.xlabel('Time')
plt.ylabel('kW')
# values were selected from the provided image, should fit the actual plotted data range
major_ticks=np.arange(20000, 120000, 20000)
# for plt.yticks(actual, replacement) you have to provide the actual tick (data) values and then the
# "replacement" values
plt.yticks(major_ticks, major_ticks/1000)
plt.show()
这应生成多个数字(每天一个),其中包含每小时数据和 y轴缩放单位为kW。