如何使索引值显示在x轴刻度上?

时间:2019-09-06 14:27:04

标签: python-3.x pandas matplotlib axis-labels

我正在从一个以工作日名称作为索引的熊猫数据框中绘制数据。地块看起来不错。但是,x轴不显示工作日(星期一至星期日的顺序)。我该如何显示日期?

如我的代码所示,我已经尝试了在网站上其他答案中找到的一些解决方法,但是我所要做的就是让第一个(星期一)滴答声与标签一起出现。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(12,6))

ax1 = fig.add_subplot(111)
ax1.xaxis.set_ticks([1])
ax1.xaxis.set_label_text(" ")
ax1.set_title(" item1 ", fontweight='bold')
avgs_df.loc[order,['item1']].plot(ax=ax1, legend=False)

在此处绘制:

enter image description here

我还没有完全理解.xaxis.set_ticks([1])上的线条,但是到目前为止,这是唯一在情节上贴上日期标签的东西。更改方括号中的值似乎会在第一个标签的顶部打印相同的单个标签。

我希望在情节的x轴上获得全部7天的刻度和标签。

数据框包含七个字段:时间(一天中的小时)和六个数字为0:1的项目字段。看看头的产量:

avgs_df.head()

此处的输出图像(我没有足够的声誉): img

1 个答案:

答案 0 :(得分:1)

.xaxis.set_ticks([1])仅将刻度线设置在位置1。这就是为什么只有星期一。

要获得7个刻度,您应该传递类似.xaxis.set_ticks(range(7))的信息(位置通常从0开始,因此range(7)会产生正确的刻度位置,从0到6)。

我不太确定这里的数据帧索引是什么(您的图片显示了所有星期五),但是如果索引像我所怀疑的那样是工作日,则即使删除.xaxis.set_ticks([1])行也应该可以工作。如果有足够的空间,matplotlib会自动将它们全部放入图片中。

评论后编辑

因此,您有168行,一周中的每一天中的每小时。如果使用ax1.xaxis.set_ticks(np.arange(0, 168, 24.0))仅允许添加所需的刻度,则可以使用以下方法设置刻度的文本:

ax1.set_xticklabels(["Monday", "Tuesday", ...]) #make a list of all days

只需在.xaxis.set_ticks()之后添加此行即可。请确保提供一个带有相同刻度长度的列表。

如果数据框索引是日期名称,则可以改用:

ax1.set_xticklabels(avgs_df.index[np.arange(0, 168, 24.0)])

获取索引的确切文本并将其作为刻度线的文本放置。