我有一个使用字符串作为索引的pandas数据框。当我的数据帧索引是object类型时,如何为x轴设置xlim?我尝试在最后添加两年,在开始时添加一年,其中所有数据集都是np.nan但是没有用。
这是数据框
索引的数据类型是object
df.index
Out[52]: Index(['2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012'], dtype='object')
这是情节
所以我希望在x轴上有一些额外的空间,这样第一年和去年的值就更明显了。我能做什么?
修改:
这是使用对象而不是日期对象作为索引
的最小示例答案 0 :(得分:4)
使用set_xlim
,+1
表示向右移动1个单位,-1
表示相反。在下面的例子中,我将每个方面扩展了0.5个月:
df=pd.DataFrame({'A': range(10), 'B': range(1, 11), 'C': range(2,12)})
df.index=pd.date_range('2001/01/01', periods=10, freq='M')
ax=df.plot(kind='line')
ax.set_xlim(np.array([-0.5, 0.5])+ax.get_xlim())
编辑,每年都有xticklabel
,而不是pandas
每两年一次的默认值:
ax=df.plot(kind='line', xticks=df.index)
ax.set_xticklabels(df.index.map(lambda x: datetime.datetime.strftime(x, '%Y')))
答案 1 :(得分:2)
from __future__ import print_function
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
df = pd.DataFrame({'Foo': pd.Series([2,3,4], index=['2002', '2003', '2004'])})
fig, ax = plt.subplots()
df.plot(ax=ax)
它可以让你获得情节。要了解如何处理x-ticks,请查看:
# note this is an AutoLocator
print(ax.xaxis.get_major_locator())
# note this is a FixedFormatter
print(ax.xaxis.get_major_formatter())
# these are the ticks that are used
ff = ax.xaxis.get_major_formatter()
print(ff.seq)
这意味着如果你在标记周围标记将保持不变,但将在随机位置。这与更改xlim的问题相同,pandas
最初设置图表的方式是标签与数据完全解耦。
解决此问题的一种(详细)方法是:
ax.xaxis.set_major_locator(mticker.FixedLocator(np.arange(len(df))))
ax.xaxis.set_major_formatter(mticker.FixedFormatter(df.index))
# note this is a FixedLocator
print(ax.xaxis.get_major_locator())
# note this is a FixedFormatter
print(ax.xaxis.get_major_formatter())
无论您将索引设置为(字符串与日期)
,这都会有效 创建了一个问题