x轴标签(日期)在Python matplotlib中滑动

时间:2017-10-10 11:32:54

标签: python-3.x pandas matplotlib plot

我是Python的初学者,我有以下问题。我想绘制一个数据集,其中x轴显示日期数据。数据集外观如下:

datum, start, end  
2017.09.01  38086   37719,8984  
2017.09.04  37707.3906  37465.2617   
2017.09.05  37471.5117  37736.1016  
2017.09.06  37723.5898  37878.8594  
2017.09.07  37878.8594  37783.5117  
2017.09.08  37764.7383  37596.75  
2017.09.11  37615.5117  37895.8516  
2017.09.12  37889.6016  38076.8789  
2017.09.13  38089.1406  38119.0898  
2017.09.14  38119.2617  38243.1992  
2017.09.15  38243.7188  38325.9297  
2017.09.18  38325.3086  38387.2188  
2017.09.19  38387.2188  38176.0781  
2017.09.20  38173.2109  38108.0391  
2017.09.21  38107.2617  38109.2109  
2017.09.22  38110.4609  38178.6289  
2017.09.25  38121.9102  38107.8711  
2017.09.26  38127.25    37319.2383  
2017.09.27  37360.8398  37244.3008  
2017.09.28  37282.1094  37191.6484  
2017.09.29  37192.1484  37290.6484

在第一列中是x轴的标签(这是日期)。

当我编写以下代码时,x轴数据滑动:

import pandas as pd
import matplotlib.pyplot as plt

bux = pd.read_csv('C:\\Home\\BUX.txt', 
               sep='\t',
               decimal='.',
               header=0)
fig1 = bux.plot(marker='o')
fig1.set_xticklabels(bux.datum, rotation='vertical', fontsize=8)

结果图看起来如下:

resulted figure

数据集中的第二个数据行是'2017.09.04 37707.3906 37465.2617',但是'2017.09.04'是第三个数据行的产量,起始值= 37471.5117

我采取了哪些措施来获得正确的x轴标签?

谢谢! 艾格尼丝

3 个答案:

答案 0 :(得分:0)

首先,第二行中有一个逗号而不是.。这应该调整。然后,将“datum”列转换为实际日期,并使用matplotlib简单地绘制数据框。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/BUX.txt',  sep='\s+')
df["datum,"] = pd.to_datetime(df["datum,"], format="%Y.%m.%d")

plt.plot(df["datum,"], df["start,"], marker="o")
plt.plot(df["datum,"], df["end"], marker="o")
plt.gcf().autofmt_xdate()
plt.show()

enter image description here

答案 1 :(得分:0)

谢谢!它完美地运作。关键时刻是将数据转换为日期格式。再次感谢你!

艾格尼丝

答案 2 :(得分:0)

实际上,您可以轻松使用df.plot()来修复它:

import pandas as pd
import matplotlib.pyplot as plt
import io
t="""
date        start       end
2017.09.01  38086       37719.8984  
2017.09.04  37707.3906  37465.2617   
2017.09.05  37471.5117  37736.1016  
2017.09.06  37723.5898  37878.8594  
2017.09.07  37878.8594  37783.5117  
2017.09.08  37764.7383  37596.75  
2017.09.11  37615.5117  37895.8516  
2017.09.12  37889.6016  38076.8789  
2017.09.13  38089.1406  38119.0898  
2017.09.14  38119.2617  38243.1992  
2017.09.15  38243.7188  38325.9297  
2017.09.18  38325.3086  38387.2188  
2017.09.19  38387.2188  38176.0781  
2017.09.20  38173.2109  38108.0391  
2017.09.21  38107.2617  38109.2109  
2017.09.22  38110.4609  38178.6289  
2017.09.25  38121.9102  38107.8711  
2017.09.26  38127.25    37319.2383  
2017.09.27  37360.8398  37244.3008  
2017.09.28  37282.1094  37191.6484  
2017.09.29  37192.1484  37290.6484
"""
import numpy as np

data=pd.read_fwf(io.StringIO(t),header=1,parse_dates=['date'])
data.plot(x='date',marker='o')
plt.show()

enter image description here