如何在matplotlib中设置自定义x轴和y轴刻度?

时间:2020-07-22 15:55:19

标签: python matplotlib

这是我从下面的代码中获得的图形(这是一个更大的脚本的片段)

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))

但没有变化。我在这里迷路了。请帮忙!

1 个答案:

答案 0 :(得分:0)

据我所知,y_test_mony_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。