python-3.x - 如何使索引值显示在 x 轴刻度上?

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

我正在绘制来自 pandas 数据框的数据,该数据框以工作日名称作为索引。情节看起来不错;但是,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

最佳答案

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

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

关于python-3.x - 如何使索引值显示在 x 轴刻度上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823923/

相关文章:

python - pygame : Why does calling a function inside the game loop inside Game loop make my game lag?

python-3.x - 如何根据替代属性选择所有元素? [美汤]

python-3.x - Mypy 报告与重写方法不兼容的父类(super class)型错误

python - Pandas:子索引数据框:副本与 View

python - 选择值为 np.nonzero() 和 ~np.isnan() 的索引

python - 如何在 MatPlotLib (NumPy) 中绘制多维数据的轮廓?

python - 如何使用 Matplotlib 创建折线图

python-3.x - 带有 lambda 表达式的 python pickle 对象

python - 使用列表扩展 Pandas 列

Python matplotlib : how to let matrixplot have variable column widths