用 pandas 年度数据制作水平线?
Make horizontal lines with pandas yearly data?
我有一个 pandas 对象,其中的年平均值数据采用这种形式:
DatetimeIndex(['2005-12-31', '2006-12-31', '2007-12-31', '2008-12-31',
'2009-12-31', '2010-12-31', '2011-12-31'],
dtype='datetime64[ns]', freq='A-DEC')
2005-12-31 3.347463
2006-12-31 3.042220
2007-12-31 3.296574
2008-12-31 3.082333
2009-12-31 2.471380
2010-12-31 2.337974
2011-12-31 2.083004
我想绘制从年初到年末的水平线,其中的值当前与一年的最后一天相关联。目前,当我绘制这个 pandas 对象时,我会在年末的点之间进行线性插值。我尝试添加索引:
new_index= ['2005', '2006', '2007', '2008','2009', '2010', '2011']
df_year.reindex(new_index)
这会产生相同的图表。或者添加每年的第一天(虽然不利于自动化):
z=datetime.strptime('01-01-2005', '%d-%m-%Y')
indx.append(pd.Index([z]))
df_year.set_value(z,2)
这导致:
DatetimeIndex(['2005-12-31', '2006-12-31', '2007-12-31', '2008-12-31',
'2009-12-31', '2010-12-31', '2011-12-31', '2005-01-01'],
dtype='datetime64[ns]', freq=None)
2005-12-31 3.347463
2006-12-31 3.042220
2007-12-31 3.296574
2008-12-31 3.082333
2009-12-31 2.471380
2010-12-31 2.337974
2011-12-31 2.083004
2005-01-01 2.000000
但是,它似乎无法检测到该日期在 2005-12-31 之前,所以它只是从 2005 年到 2011 年画了一条水平线。如果你能帮助我,我将不胜感激。
很遗憾,我无法上传图表,因为我在不同的服务器上工作,无法保存图像。
谢谢。
版次:
这是我使用的代码:
plt.figure()
plt.plot(df_month.index, df_month, 'k')
plt.plot(df_year.index, df_year, 'g')
plt.show()
如果我理解正确的话,你想要一个条形图或像 plit 这样的步骤,使用日期作为 x 轴来计算你的值。
数据帧
如果我们设置DataFrame
如下:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([["2005-12-31", 3.347463],["2006-12-31", 3.042220],["2007-12-31", 3.296574],["2008-12-31", 3.082333],["2009-12-31", 2.471380],["2010-12-31", 2.337974],["2011-12-31", 2.083004]])
df.columns = ["date", "value"]
df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d")
df = df.set_index(["date"])
您的 DataFrame
将是:
>>> df
value
date
2005-12-31 3.347463
2006-12-31 3.042220
2007-12-31 3.296574
2008-12-31 3.082333
2009-12-31 2.471380
2010-12-31 2.337974
2011-12-31 2.083004
请注意,我们将 date
列设置为索引。
使用plot.bar
您可以使用plot.bar
功能。如果由于 pandas
版本而无法使用,您可以试试 plot(kind="bar")
。下面的代码将绘制并显示所需的图形:
df.plot.bar(width=1,fill=False)
plt.tight_layout()
plt.show()
并且输出图将导致:
请注意,将 width
用作 1 我们会得到整个宽度的条形。 width
默认为 0.5。
使用以 steps-mid 作为线型的绘图
否则,您可以使用 plot
和 steps-mid
作为线型,代码如下:
df.plot(ls="steps-mid")
plt.show()
你得到如下图:
我有一个 pandas 对象,其中的年平均值数据采用这种形式:
DatetimeIndex(['2005-12-31', '2006-12-31', '2007-12-31', '2008-12-31',
'2009-12-31', '2010-12-31', '2011-12-31'],
dtype='datetime64[ns]', freq='A-DEC')
2005-12-31 3.347463
2006-12-31 3.042220
2007-12-31 3.296574
2008-12-31 3.082333
2009-12-31 2.471380
2010-12-31 2.337974
2011-12-31 2.083004
我想绘制从年初到年末的水平线,其中的值当前与一年的最后一天相关联。目前,当我绘制这个 pandas 对象时,我会在年末的点之间进行线性插值。我尝试添加索引:
new_index= ['2005', '2006', '2007', '2008','2009', '2010', '2011']
df_year.reindex(new_index)
这会产生相同的图表。或者添加每年的第一天(虽然不利于自动化):
z=datetime.strptime('01-01-2005', '%d-%m-%Y')
indx.append(pd.Index([z]))
df_year.set_value(z,2)
这导致:
DatetimeIndex(['2005-12-31', '2006-12-31', '2007-12-31', '2008-12-31',
'2009-12-31', '2010-12-31', '2011-12-31', '2005-01-01'],
dtype='datetime64[ns]', freq=None)
2005-12-31 3.347463
2006-12-31 3.042220
2007-12-31 3.296574
2008-12-31 3.082333
2009-12-31 2.471380
2010-12-31 2.337974
2011-12-31 2.083004
2005-01-01 2.000000
但是,它似乎无法检测到该日期在 2005-12-31 之前,所以它只是从 2005 年到 2011 年画了一条水平线。如果你能帮助我,我将不胜感激。
很遗憾,我无法上传图表,因为我在不同的服务器上工作,无法保存图像。
谢谢。
版次:
这是我使用的代码:
plt.figure()
plt.plot(df_month.index, df_month, 'k')
plt.plot(df_year.index, df_year, 'g')
plt.show()
如果我理解正确的话,你想要一个条形图或像 plit 这样的步骤,使用日期作为 x 轴来计算你的值。
数据帧
如果我们设置DataFrame
如下:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([["2005-12-31", 3.347463],["2006-12-31", 3.042220],["2007-12-31", 3.296574],["2008-12-31", 3.082333],["2009-12-31", 2.471380],["2010-12-31", 2.337974],["2011-12-31", 2.083004]])
df.columns = ["date", "value"]
df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d")
df = df.set_index(["date"])
您的 DataFrame
将是:
>>> df
value
date
2005-12-31 3.347463
2006-12-31 3.042220
2007-12-31 3.296574
2008-12-31 3.082333
2009-12-31 2.471380
2010-12-31 2.337974
2011-12-31 2.083004
请注意,我们将 date
列设置为索引。
使用plot.bar
您可以使用plot.bar
功能。如果由于 pandas
版本而无法使用,您可以试试 plot(kind="bar")
。下面的代码将绘制并显示所需的图形:
df.plot.bar(width=1,fill=False)
plt.tight_layout()
plt.show()
并且输出图将导致:
请注意,将 width
用作 1 我们会得到整个宽度的条形。 width
默认为 0.5。
使用以 steps-mid 作为线型的绘图
否则,您可以使用 plot
和 steps-mid
作为线型,代码如下:
df.plot(ls="steps-mid")
plt.show()
你得到如下图: