绘制日期在x轴上失败并扩展到子图

时间:2018-07-11 09:54:50

标签: python pandas dataframe matplotlib

我正在尝试绘制一些数据,但是以某种方式在x轴上显示的数据不是正确的格式。取而代之的是2018年1月3日等我收到0028-02-23。从csv文件获取数据时,加载数据时已经加载了正确的格式。

此外,我想在不同的子图中绘制数据,这意味着子图1中的值组,子图2中的valuegroub B等。

图看起来像

enter image description here

类似的代码:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter

csv_loader = pd.read_csv('C:/Users/micha/Desktop/Test.csv', encoding='cp1252', parse_dates=['Date'], sep=';', index_col=0).dropna()

fig, ax = plt.subplots()
csv_loader.groupby('Valuegroup').plot(x='Date', y='Value', ax=ax, legend=False, kind='line')
plt.grid(True)   
myFmt = DateFormatter("%Y-%m-%d")
ax.xaxis.set_minor_formatter(myFmt) 
plt.show()

数据如下:

Calcgroup;Valuegroup;id;Date;Value
Group1;A;1;20080103;0.1
Group1;A;1;20080104;0.3
Group1;A;1;20080107;0.5
Group1;A;1;20080108;0.9
Group1;B;1;20080103;0.5
Group1;B;1;20080104;1.3
Group1;B;1;20080107;2.0
Group1;B;1;20080108;0.15
Group1;C;1;20080103;1.9
Group1;C;1;20080104;2.1
Group1;C;1;20080107;2.9
Group1;C;1;20080108;0.45

并且在导入后,我具有以下数据框:

csv_loader
          Valuegroup  id       Date  Value
Calcgroup                                 
Group1             A   1 2008-01-03   0.10
Group1             A   1 2008-01-04   0.30
Group1             A   1 2008-01-07   0.50
Group1             A   1 2008-01-08   0.90
Group1             B   1 2008-01-03   0.50
Group1             B   1 2008-01-04   1.30
Group1             B   1 2008-01-07   2.00
Group1             B   1 2008-01-08   0.15
Group1             C   1 2008-01-03   1.90
Group1             C   1 2008-01-04   2.10
Group1             C   1 2008-01-07   2.90
Group1             C   1 2008-01-08   0.45

2 个答案:

答案 0 :(得分:0)

尝试此解决方案

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import matplotlib.dates as mdates

csv_loader = pd.read_csv('C:/Users/micha/Desktop/Test.csv', encoding='cp1252', parse_dates=['Date'], sep=';', index_col=0)

fig, ax = plt.subplots()
csv_loader.groupby('Valuegroup').plot(x='Date', y='Value', ax=ax, legend=False, kind='line')
plt.grid(True)

myFmt = DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(myFmt)

fig.autofmt_xdate()

plt.show()

答案 1 :(得分:0)

说实话,我无法在您的代码中找到该日期格式的问题,但是,当至少测试我在单独的子图中绘制的方法时(您也要求这样做),我看到了格式问题已经解决,自动格式已经是您想要的格式:

fig, axs = plt.subplots(3, sharex=True, sharey=True)
for i, (name, grp) in enumerate(csv_loader.groupby('Valuegroup')):
    axs[i].plot(grp.Date, grp.Value)
    axs[i].set_title(name)
plt.tight_layout()

见自己:

enter image description here