【问题标题】:show date on axis of a plot in matplotlib在 matplotlib 中的绘图轴上显示日期
【发布时间】:2015-07-01 11:55:06
【问题描述】:

我有一个问题。我想在 matplotlib 中绘制图表。 x 轴包含日期和 y 轴高度(以米为单位)。从我的 readin 方法中我得到了。

minlist = [368.23000000000002, 368.12, 368.20999999999998, 368.35000000000002, 368.16000000000003, 367.98000000000002, 367.98000000000002, 367.97000000000003, 367.83999999999997, 367.63999999999999, 367.85000000000002, 367.56, 367.87, 367.99000000000001, 367.75, 367.88, 367.92000000000002, 367.81, 367.86000000000001, 367.95999999999998, 367.79000000000002, 367.67000000000002, 367.81999999999999, 367.91000000000003, 367.81999999999999, 367.81999999999999, 367.74000000000001, 367.80000000000001, 367.76999999999998, 367.85000000000002, 367.88999999999999, 367.76999999999998, 367.79000000000002, 367.86000000000001, 367.88999999999999, 367.86000000000001, 367.94999999999999, 367.94999999999999, 367.87, 367.91000000000003]

此列表应在逗号后有两位数。

现在我使用一种方法将像“23.05.2012”这样的字符串转换为日期。

def stringtodate(array):

i = 1
end = len(array)

date_format = []

while i <= end:

    string_date = str(array[i-1])

    time_tuple = datetime.strptime(string_date, "%d.%m.%Y")

    date_format.append(time_tuple)

    i = i+1

return date_format

返回这样的列表:

yearlist = [datetime.datetime(1975, 7, 22, 0, 0), datetime.datetime(1976, 11, 9, 0, 0), datetime.datetime(1977, 9, 23, 0, 0) , datetime.datetime(1978, 7, 31, 0, 0), datetime.datetime(1979, 7, 31, 0, 0), datetime.datetime(1980, 9, 4, 0, 0), datetime.datetime( 1981, 8, 27, 0, 0), datetime.datetime(1982, 7, 22, 0, 0), datetime.datetime(1983, 9, 16, 0, 0), datetime.datetime(1984, 8, 31 , 0, 0), datetime.datetime(1985, 9, 27, 0, 0), datetime.datetime(1986, 9, 8, 0, 0), datetime.datetime(1987, 8, 4, 0, 0) , datetime.datetime(1988, 8, 4, 0, 0), datetime.datetime(1989, 7, 18, 0, 0), datetime.datetime(1990, 7, 18, 0, 0), datetime.datetime( 1991, 7, 31, 0, 0), datetime.datetime(1992, 7, 22, 0, 0), datetime.datetime(1993, 8, 25, 0, 0), datetime.datetime(1994, 8, 17 , 0, 0), datetime.datetime(1995, 7, 25, 0, 0), datetime.datetime(1996, 8, 8, 0, 0), datetime.datetime(1997, 8, 7, 0, 0) , datetime.datetime(1998, 8, 24, 0, 0), datetime.datetime(2000, 5, 31, 0, 0), datetime.datetime(2001, 8, 29, 0, 0), dat etime.datetime(2002, 8, 30, 0, 0), datetime.datetime(2003, 9, 18, 0, 0), datetime.datetime(2004, 10, 19, 0, 0), datetime.datetime(2005 , 7, 7, 0, 0), datetime.datetime(2006, 5, 16, 0, 0), datetime.datetime(2007, 9, 19, 0, 0), datetime.datetime(2008, 5, 13, 0, 0), datetime.datetime(2009, 11, 24, 0, 0), datetime.datetime(2010, 10, 18, 0, 0), datetime.datetime(2011, 5, 3, 0, 0), datetime.datetime(2013, 1, 8, 0, 0), datetime.datetime(2013, 11, 19, 0, 0), datetime.datetime(2014, 8, 27, 0, 0), datetime.datetime(2014 , 12, 1, 0, 0)]

现在我想用 matplotlib 绘制这两个列表。我的代码是:

def plotminimum(minList,yearList):

print(minList)
print(yearList)

try:

    plt.xlabel('Datum')
    plt.ylabel('minimale Sohle [m.u.A]')


    plt.xticks(yearList)
    plt.xticks(rotation=70)

    plot(yearList,minList, label='blau')

    show()

except:

    print('Profil nicht vorhanden!')

现在的问题是 x 轴不显示日期。我一个人找不到我的错误,请帮助我。

我希望我为您提供了足够的信息来帮助我解决问题。

问候

【问题讨论】:

  • x 轴显示的是一个 6 位数字。不幸的是我不能发布情节

标签: python matplotlib


【解决方案1】:

好的,所以我在绘图程序中转换了日期。我有一系列日期直接从 csv 文件中提取,因此日期最初看起来像 2014 年 10 月 2 日。我命名了那个系列日期。我的代码如下所示:

date = data['Date'] # data is just the variable I am using to hold the csv file. 
# The above line is just pulling the date column into it's own variable.

x1 = [dt.datetime.strptime(d, '%m/%d/%Y').date() for d in date]

您必须在导入中添加一行以将日期时间导入为 dt 才能正常工作。然后,当你使用 plot 命令时,像这样设置它:

plot(x1, minList, label='blau')

这应该正确标记 x 轴而不需要 plt.xticks(yearList),但如果你可以尝试使用和不使用。

【讨论】:

  • 那行得通,是的!但问题是我希望我的列表日期显示在 x 轴上。删除 plt.xticks(yearList) 会导致 matplotlib 自动缩放 x 轴,但这不是我需要的。
  • 嗯....我研究了我的绘图程序,看起来我做了和你类似的事情。主要区别在于我没有在绘图程序之前转换日期。我将用我如何写出我的图形程序来更新我的答案,你可以看看这是否有帮助。
  • 你的代码和我的方法一样!问题是我在 x-achsis 上得到了一个看起来像 721191 的打印件。我用谷歌搜索它,它打印出从公历日历或类似的东西计数的数字。
  • 这很奇怪。抱歉,我不知道它为什么会那样做。重新格式化之前的日期究竟是什么样的?
  • 好的,这是我想尝试的最后一件事了。将plt.xticks(yearList) 行替换为plt.xticks(range(len(minList)), yearList) 并将plot(yearList,minList, label='blau') 行替换为plot(minList, label='blau')
猜你喜欢
  • 2020-06-09
  • 2020-07-08
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2018-10-08
  • 2012-03-26
相关资源
最近更新 更多