3 回答

TA貢獻1860條經(jīng)驗 獲得超9個贊
最簡單的方法是將日期轉(zhuǎn)換為實際的日期時間索引。這種方式matplotlib
會自動拾取它并相應(yīng)地繪制它。例如,給定您的日期格式,您可以執(zhí)行以下操作:
df["Date"] = pd.to_datetime(df["Date"].astype(str), format='%Y.%m') df = df.set_index("Date") plt.plot(df["Price"].tail(100))
目前,您顯示的第一個圖實際上是Price
針對 繪制列index
,這似乎是從 0 - 1800 之類的常規(guī)范圍索引。您建議您的數(shù)據(jù)從 1981 年開始,因此盡管每個觀測值在 x 軸上均勻分布(間隔為 1,即從一個索引值到下一個索引值的跳躍)。這就是為什么該圖表看起來很合理。但 x 軸值卻沒有。
現(xiàn)在,當您將Date
(作為浮點數(shù))設(shè)置為索引時,請注意,您沒有均勻地覆蓋 1981 年和 1982 年之間的時間間隔。您有 1981.1 - 1981.12 之間均勻間隔的值,但 1981.12 - 1982 之間沒有任何值。這就是為什么第二個圖表也按預(yù)期繪制的原因。DatetimeIndex
如上所述將索引設(shè)置為 a應(yīng)該可以消除此問題,因為 Matplotlib 知道如何沿 x 軸均勻地間隔日期。

TA貢獻1853條經(jīng)驗 獲得超9個贊
df['Date']
將其視為不是一個好主意float
。它應(yīng)該轉(zhuǎn)換成 pandas?datetime64[ns]
。這可以使用 pandas 方法來實現(xiàn)pd.to_datetime
。
嘗試這個:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('ie_data.csv')
df=df[['Date','Price']]
df.dropna(inplace=True)
#converting to pandas datetime format
df['Date'] = df['Date'].astype(str).map(lambda x : x.split('.')[0] + x.split('.')[1])
df['Date'] = pd.to_datetime(df['Date'], format='%Y%m')
df.set_index(['Date'],inplace=True)
#plotting
df.plot() #full data plot
df.tail(100).plot() #plotting just the tail
plt.title("S&P500 Composite Historical Data")
plt.xlabel("Date")
plt.ylabel("Price")
plt.show()
輸出:

TA貢獻1784條經(jīng)驗 獲得超9個贊
我認為你的問題是你的 Date 是 float 類型,并將其作為 x 軸完全符合將此類數(shù)組作為([2012.01, 2012.02, ..., 2012.12, 2013.01....])
x 軸的預(yù)期效果。您可以先將 Date 列轉(zhuǎn)換為 DateTimeIndex,然后使用內(nèi)置的 pandas 繪圖方法:
df["Price"].tail(100).plot()
添加回答
舉報