[英]How to set custom x-axis and y-axis ticks in 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))
但没有变化。 我在这里迷路了。 请帮忙!
据我所见, y_test_mon
和y_pred_mon
的结果是根据各自数据集的“索引”绘制的。 从定义X_test_mon
的行中,我怀疑 plot 中每个数据点之间的最小时间步长是 1 小时。
现在为整个监控时间跨度绘制了 plot。 尝试以下操作:
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()
这应该生成多个数字(每天一个),其中包含每小时数据和 kW 的 y 轴缩放。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.