Matplotlib Pandas 日期时间频率

2024-02-25

我正在尝试使用 matplotlib 绘制一些数据,并希望减少显示的 DateTime x 轴刻度数。我能够使用 plt.locator 将垃圾箱的数量减少一半,但日期时间与条形不对齐。 有什么办法可以解决这个问题吗?我希望只显示 10 个刻度中的 5 个。例如,仅以下日期时间显示在各自的绘制条形下方(2017-09-29 02:00、2017-09-29 04:00、2017-09-29 06:00、2017-09-29 08:00 ,2017-09-29 10:00)。

下面是我的可重现代码和绘制的输出。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame([{'DATETIME': '2017-09-29 01:00,', 'Population': 1000},
                   {'DATETIME': '2017-09-29 02:00,', 'Population': 3000},
                   {'DATETIME': '2017-09-29 03:00,', 'Population': 4000},
                   {'DATETIME': '2017-09-29 04:00,', 'Population': 5000},
                   {'DATETIME': '2017-09-29 05:00,', 'Population': 7000},
                   {'DATETIME': '2017-09-29 06:00,', 'Population': 6000},
                   {'DATETIME': '2017-09-29 07:00,', 'Population': 5000},
                   {'DATETIME': '2017-09-29 08:00,', 'Population': 4000},
                   {'DATETIME': '2017-09-29 09:00,', 'Population': 4000},
                   {'DATETIME': '2017-09-29 10:00,', 'Population': 4000}])

df.index = df['DATETIME']
df.index = (pd.to_datetime(df.index)).strftime("%m/%d %H:00")
df.Population.plot.bar()
plt.tick_params(axis='both', which='both', labelsize=7)
plt.locator_params(nbins=5)
plt.tight_layout()
plt.show()

首先让我解释一下为什么你选择设置方法nbins定位器参数失败,尽管原则上该方法可能完全符合您的要求。
图中的条形位于整数位置0,1,2,...N-1。它们的标签被设置为固定的文本列表。因此,如果您选择仅使用 5 个刻度,则这些刻度的位置正确,但这些刻度的标签将被视为固定标签列表中的前 5 个元素。因此,第三个条具有第二个条的标签,第五个条具有第三个条的标签,依此类推。

知道了这一点,我们可以通过对当前标签进行切片,在每隔一个柱设置新的价格变动和价格变动标签。您可以通过以下方式获取当前刻度位置和标签plt.xticks(),它返回一个元组ticks and labels。切片列表很容易通过::操作员,
e.g. [0,1,2,3,4,5][1::2]回报[1,3,5]. Hence:

plt.xticks(plt.xticks()[0][1::2], 
           plt.xticks()[1][1::2])

完整示例:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame([{'DATETIME': '2017-09-29 01:00,', 'Population': 1000},
                   {'DATETIME': '2017-09-29 02:00,', 'Population': 3000},
                   {'DATETIME': '2017-09-29 03:00,', 'Population': 4000},
                   {'DATETIME': '2017-09-29 04:00,', 'Population': 5000},
                   {'DATETIME': '2017-09-29 05:00,', 'Population': 7000},
                   {'DATETIME': '2017-09-29 06:00,', 'Population': 6000},
                   {'DATETIME': '2017-09-29 07:00,', 'Population': 5000},
                   {'DATETIME': '2017-09-29 08:00,', 'Population': 4000},
                   {'DATETIME': '2017-09-29 09:00,', 'Population': 4000},
                   {'DATETIME': '2017-09-29 10:00,', 'Population': 4000}])

df.index = df['DATETIME']
df.index = (pd.to_datetime(df.index)).strftime("%m/%d %H:00")
df.Population.plot.bar()
plt.tick_params(axis='both', which='both', labelsize=7)

plt.xticks(plt.xticks()[0][1::2], 
           plt.xticks()[1][1::2])

plt.tight_layout()
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matplotlib Pandas 日期时间频率 的相关文章

随机推荐