matplotlib 在for循环中更改绘图的小时格式

iecba09b  于 2023-03-03  发布在  其他
关注(0)|答案(3)|浏览(134)

我已经找了几个小时了,在Python中我用for循环来创建子情节,所以我没有定义ax和fig,所以我似乎没有找到任何解决方案。

df_june['hours']=df_june['date'].dt.hour
*df_june is dataset only for 1st of june*

for i in important_cols[1:]:
    sns.lineplot(x='hours', y=i, data=df_june)
    plt.xticks([0,4,8,12,16,20,24])
    plt.show()

*import_cols are columns I am only needing to plot*

我使用plt.xticks([0,4,8,12,16,20,24])来创建刻度,但是我希望它是每小时的,并且格式是00:00和24:00。

2w3rbyxf

2w3rbyxf1#

我所做的就是换成这个

df['time']=df['date'].dt.strftime('%H:%M')

以及

for i in important_cols[1:]:
    sns.lineplot(x='time', y=i, data=df_june)
    plt.xticks(rotation=45)
    plt.show()

rnmwe5a2

rnmwe5a22#

我们可以使用列表解析从get_xticks()创建xticklabels,在xtick的末尾加上':00',在前面加上'0',然后将str缩短为(最后)5个索引(即格式化xx:xx):

subplot_number = 0
for i in important_cols[1:]:
    subplot_number += 1
    ax = plt.subplot(1, len(important_cols[1:]), subplot_number)
    sns.lineplot(x='hours', y=i, data=df_june)
    ax.set_xticks([0,4,8,12,16,20,24])
    ax.set_xticklabels([_xticklabel[-5:] for _xticklabel in ['0' + str(_xtick) + ':00' for _xtick in ax.get_xticks()]])
    plt.show()

xticklabels看起来像:

hwazgwia

hwazgwia3#

尝试设置x-tick标签的格式,以“00:00”和“24:00”的格式显示小时,而不是整数,您可以使用matplotlib的DateFormatter类和所需的格式字符串。
下面是一个更新后的代码片段,应该可以达到预期的效果:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

df_june['hours'] = df_june['date'].dt.hour
important_cols = ['column1', 'column2', 'column3']  # Replace with your desired column names

fig, axs = plt.subplots(len(important_cols), 1, figsize=(8, 8), sharex=True)

for i, col in enumerate(important_cols):
    sns.lineplot(x='hours', y=col, data=df_june, ax=axs[i])
    axs[i].xaxis.set_major_locator(mdates.HourLocator(interval=1))
    axs[i].xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
    axs[i].set_xlabel('Time')
    axs[i].set_ylabel(col)

plt.show()

这里,我们使用plt.subplots()创建子图,并将其存储在axs变量中,然后迭代每个重要列,并使用sns.lineplot()函数中的ax参数在单独的子图中为每列绘制线图。
我们使用axs[i].xaxis.set_major_locator(mdates.HourLocator(interval=1))设置x轴刻度位置,并使用格式化x轴刻度标签
axs[i].xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
,它将以所需的格式显示小时。
生成的绘图应具有x刻度标签,以“00:00”和“24:00”格式显示小时。

相关问题