将指数显示为大熊猫情节的xticks

时间:2018-06-11 20:38:33

标签: python pandas matplotlib

我有以下数据框并试图绘制它,以便它在x轴显示8-19的索引数据。

如果我df.plot(),则根本不显示任何标签。如果我df.plot(use_index=True),则行为不变。最后我尝试df.plot(xticks=df.index),但收到错误AttributeError: 'NoneType' object has no attribute 'seq'

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
null = np.nan

df = pd.DataFrame.from_dict({"today sensor 1": {"08": 22.9, "09": 22.7, "10": 22.8, "11": 23.6, "12": 24.1, "13": 24.9,
                                           "14": 25.0, "15": 25.2, "16": 25.7, "17": 26.1, "18": 26.0, "19": 25.8},
                        "today sensor 2": {"08": 24.5, "09": 24.5, "10": 24.8, "11": 25.3, "12": 26.4, "13": 26.7,
                                           "14": 27.1, "15": 27.6, "16": 28.0, "17": 28.0, "18": 28.2, "19": 28.0},
                        "yesterday sensor 1": {"08": null, "09": null, "10": null, "11": null, "12": null, "13": null,
                                               "14": null, "15": null, "16": 23.0, "17": 23.6, "18": 23.5, "19": 23.5},
                        "yesterday sensor 2": {"08": null, "09": null, "10": null, "11": null, "12": null, "13": null,
                                               "14": null, "15": null, "16": 24.8, "17": 24.9, "18": 24.9, "19": 24.8}})

# df.plot(use_index=True)  # does not work
df.plot(xticks=df.index)

plt.show()

更奇怪的是,当我这样做时:

ax = df.plot(use_index=True, style=['bs-', 'go-', 'b:', 'g:'])
ax.set_xticklabels(df.index)
plt.show()

xticks会显示,但他们错了。只有9-14的数字才会被嘲笑,而只有其他数字。我希望08-19可以作为xticks。

任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:7)

如果你想把字符串作为xticks,一个可能的解决方案是:

df = df.reset_index()
df = df.rename(columns={"index":"hour"})
ax = df.plot(xticks=df.index)
ax.set_xticklabels(df["hour"]);

答案 1 :(得分:0)

Pandas适用于Python 3.6(Windows)的0.24版为我解决了此问题。

答案 2 :(得分:0)

在熊猫中的错误得到修复之前,请将其添加到df.plot()之后,无需其他操作:

plt.xticks(range(len(df.index)), df.index)