【问题标题】:Plotting Date fails on x-axis and extension to subplots在 x 轴上绘制日期失败并扩展到子图
【发布时间】:2018-07-11 09:54:49
【问题描述】:

我正在尝试绘制一些数据,但不知何故,x 轴上显示的数据格式不正确。取而代之的是 2018-01-03 等,我收到的是 0028-02-23。加载数据时,从 csv 文件获取数据时已经加载了正确的格式。

此外,我希望将数据绘制在不同的子图中意味着子图 1 中的值组、子图 2 中的值组 B 等。

人像

代码如下:

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

【问题讨论】:

  • 关于您的数据框只有两个想法:我不建议使用像您的 Calcgroup 这样的列作为索引;索引应该提供对数据框中单行的唯一访问。然后 - IMO - csv_reader 不是 pandas 数据框的正确名称;这将是对 pd.read_csv 函数的一个很好的描述,但不是它的返回值

标签: python pandas dataframe matplotlib


【解决方案1】:

试试这个解决方案

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()

【讨论】:

    【解决方案2】:

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

    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()
    

    看看你自己:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多