繁体   English   中英

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

[英]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_mony_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM