为 Pandas DataFrame 绘图设置 xlim

4

我正在从一个 Pandas DataFrame 绘制一个堆叠条形图。索引日期以 datetime 格式表示,绘图效果很好。我遇到的问题是尝试设置 xlim 值。

day_counts = {'a': count_a,
              'b': count_b,
              'c': count_c,
              'd': count_d}

df_days = pd.DataFrame(day_counts, index=date)

变量count_a、...、count_d是数字列表,datedatetime对象的列表。
没有设置xlim参数的绘图结果如下: enter image description here 尝试使用xlim进行绘图1:
ax = df_days.plot(kind='bar', stacked=True,
                  xlim=[pd.Timestamp('2015-09-01'), pd.Timestamp('2016-01-01')])

使用xlim进行绘图的第二次尝试:

ax = df_days.plot(kind='bar', stacked=True)
ax.set_xlim(pd.Timestamp('2015-09-01'), pd.Timestamp('2016-01-01')) 

使用xlim绘图第三次尝试:

ax = df_days.plot(kind='bar', stacked=True)
ax.set_xlim(datetime.datetime(2015,9,1),date[-1])

如果可能的话,我希望能够将xlim命令放在主绘图命令里,因为数据集非常大。有什么建议吗?


你没有为count_a、count_b、count_c、count_d或date提供任务。你的字典将'a'分配了两次和'b'分配了两次,覆盖了第一个分配。 - piRSquared
哎呀,抱歉这只是为了在Stack Overflow上简化错误,现在正在更正。 - mjp
这是一个老问题,但为什么不在绘图之前将时间范围作为源数据帧上的选择应用,如下所示:df_days[start:stop].plot(...)?这比设置 xlim 更快(假设您不想更改 x 轴边界)。 - Joël
1
对我来说,这是因为限制是由我绘制的第一个系列定义的(该系列仅具有本月前三天的数据),即使下一个系列具有更多的数据,也不会被扩展;换句话说,我的绘图根据我先绘制哪个系列而改变x限制,下面的答案会产生一个空白图。 - Marius Wallraff
1个回答

3
根据https://dev59.com/yV4c5IYBdhLWcg3w3tkv#31500017,以下内容应该可行:

ax.set_xlim(pd.Timestamp('2015-09-01'), pd.Timestamp('2016-01-01'))

请确保您的df索引是DatetimeIndex类型。它是否有重复?是否已排序?未排序的DatetimeIndex会导致使用时间戳进行切片索引失败。


1
它只是显示一个空的图形,尽管我知道该时间段存在于数据中。date[-1] 给出 datetime.datetime(2016, 4, 30, 0, 0),所以它绝对是一个日期时间列表。我没有自己排序,但所有数据都已按天顺序排列,没有间隙。 - mjp
2
如果我运行该示例并将kind更改为bar,则它将停止工作。我也遇到了OP的问题。 - user815512
1
是的,空白图仅适用于“条形”图。有人找到了解决方案吗? - caesarsol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接