Python 减少熊猫图中时间轴上的XTIC数量

Python 减少熊猫图中时间轴上的XTIC数量,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,我有两个时间轴熊猫系列。数据每5分钟呈现一次(大致,不完全),跨度为2天。没有实际的缺失值,但两个间隔不均的数据系列不一定在同一时刻有数据。我想用条形图绘制这两个系列,一个在另一个之上。我使用下面的代码创建一个数据帧,然后调用它的plot.bar()方法: df = pd.concat({"download": series_ok, "failed": series_fail}, axis=1) axes = df.plot.bar(rot=0, subp

我有两个时间轴熊猫系列。数据每5分钟呈现一次(大致,不完全),跨度为2天。没有实际的缺失值,但两个间隔不均的数据系列不一定在同一时刻有数据。我想用条形图绘制这两个系列,一个在另一个之上。我使用下面的代码创建一个数据帧,然后调用它的
plot.bar()
方法:

df = pd.concat({"download": series_ok, "failed": series_fail}, axis=1)
axes = df.plot.bar(rot=0, subplots=True, color={"failed": "red", "download": "green"})
这几乎是可行的,但问题是XTIC的间距太小,以至于整个绘图需要几秒钟才能完成,时间信息无法读取,而且太重,以至于它实际上是非交互式的

我如何调整xtics来表示我想要一个1小时甚至2小时的间隔


好的,下面是我的想法:

创建虚拟数据帧(每5分钟采样一次):

Pandas将自动执行刻度分辨率更改,前提是使用常规fequency timeseries数据。x_compact参数=True将抑制该行为

ax = df.plot(x_compat=True)
ax.xaxis.set_major_locator(mdates.HourLocator(interval=4))   #to get a tick every 4 hours
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M')) #format what the labels look like
编辑:我注意到标签和x记号没有完全对齐,希望这可以解决以下问题:

我不知道你的数据到底是什么样子的,所以希望这足够继续下去

编辑
好的,在意识到你的代码使用了条形图之后,我已经更新了代码。我认为您必须使用matplotlib来绘制条形图,并获得正确显示的日期时间和编辑x轴(和)

因此,请尝试调整您的代码,以执行以下类似操作:

import random
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.dates as mdates
random.seed(30)

df = pd.DataFrame({
    "Site 1": np.random.rand(577),
    "Site 2": np.random.rand(577),})

idx = pd.date_range(start='2020-01-01 00:00:00', end='2020-01-03 00:00:00',freq ='5T')
df = df.set_index(idx)

fig, ax = plt.subplots(figsize=(12,8))
ax.bar(df.index, df['Site 1'], width=0.005)
ax.xaxis.set_major_locator(mdates.HourLocator(interval=4))   #to get a tick every 4 hours
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
ax.tick_params(axis='x', labelrotation = 90) 
plt.show()

你需要在这里设置一个子图来显示这两个图,但这应该能让你走上正确的轨道。很抱歉搞混了,我正在和你一起学习这些东西

您的x轴是日期时间还是类似于0、5、10、15等?它们是实际的datetime64对象。
x_compact
(我找不到它的文档)确实解决了使用like绘制的问题。不幸的是,它不适用于
kind='bar'
,这是我的场景。它引发了一个异常:
AttributeError:'Rectangle'对象没有属性“x_compat”
啊,是的,我错了,我以为你的图像显示的是线图。我可能过一会儿就能看一看。如果只删除x_compat=True部分,然后运行它,会发生什么情况?然后我得到了打开问题的数字,有数千个tic和标签;看下面的问题:我已经更新了我的答案,希望能解决它。你可能需要调整条的宽度,因为有太多的数据被压缩到一个图中,但我认为它仍然可以正常工作。下面是另一个显示datetime条形图示例的链接:
for label in ax.xaxis.get_ticklabels():
    label.set_horizontalalignment('center')
ax.xaxis.set_tick_params(rotation=90)  # rotate the x axis labels, if you want
plt.show()
import random
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.dates as mdates
random.seed(30)

df = pd.DataFrame({
    "Site 1": np.random.rand(577),
    "Site 2": np.random.rand(577),})

idx = pd.date_range(start='2020-01-01 00:00:00', end='2020-01-03 00:00:00',freq ='5T')
df = df.set_index(idx)

fig, ax = plt.subplots(figsize=(12,8))
ax.bar(df.index, df['Site 1'], width=0.005)
ax.xaxis.set_major_locator(mdates.HourLocator(interval=4))   #to get a tick every 4 hours
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
ax.tick_params(axis='x', labelrotation = 90) 
plt.show()