【问题标题】:Plot date and time (x axis) versus a value (y axis) using data from file使用文件中的数据绘制日期和时间(x 轴)与值(y 轴)
【发布时间】:2013-02-22 01:33:54
【问题描述】:

我在文件 (.dat) 中有数据,格式为

%dd %mm %yyyy %HH %MM %SS 值

以空格分隔。我想在 x 轴上绘制日、月、年和时间,在 y 轴上绘制值。它应该始终从文件中读取它,因为我有许多非常大的文件需要分析。

我最近的尝试:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from time import gmtime, strftime
date, time, level = np.loadtxt('my_file.txt', unpack=True, usecols = (0,1,2,3), converters={ 0,1: mdates.strpdate2num('%dd/%mm/%YY %HH:%MM')}) #read format of file
# then to plot 
plt.plot_date(x=date, y=level, fmt='%dd/%mm/%YY %HH:%MM') # fmt is changed from r- 
plt.title('title')
plt.ylabel('Waterlevel (m)')
plt.grid(True)
plt.show()

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    如果我正确理解了您的问题,我相信这是一个可能的解决方案:

    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    from datetime import datetime
    import numpy as np    
    
    # Converter function
    datefunc = lambda x: mdates.date2num(datetime.strptime(x, '%d %m %Y %H %M %S'))
    
    # Read data from 'file.dat'
    dates, levels = np.genfromtxt('file.dat',    # Data to be read
                                  delimiter=19,  # First column is 19 characters wide
                                  converters={0: datefunc}, # Formatting of column 0
                                  dtype=float,   # All values are floats
                                  unpack=True)   # Unpack to several variables
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    # Configure x-ticks
    ax.set_xticks(dates) # Tickmark + label at every plotted point
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
    
    ax.plot_date(dates, levels, ls='-', marker='o')
    ax.set_title('title')
    ax.set_ylabel('Waterlevel (m)')
    ax.grid(True)
    
    # Format the x-axis for dates (label formatting, rotation)
    fig.autofmt_xdate(rotation=45)
    fig.tight_layout()
    
    fig.show()
    

    file.dat 是例如

    01 06 2013 00 00 00 24.23
    02 06 2013 01 00 00 22.23
    03 06 2013 02 00 00 21.43
    04 06 2013 03 00 00 24.32
    04 06 2013 14 30 00 23.42
    06 06 2013 03 00 00 24.32
    07 06 2013 19 20 00 23.54
    08 06 2013 03 00 00 26.23
    08 06 2013 19 00 00 24.43
    10 06 2013 12 40 00 23.22
    

    输出变成这样:

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多