簡體   English   中英

Python:繪制時間戳數據框matplotlib

[英]Python: plot timestamp data frame matplotlib

我正在繪制一段時間內的值(即每小時)我有一個數據幀dfout如下

    val     x            y                      ID                              time
0   6.0 48.730304   11.594837   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:02:02
1   6.5 48.731639   11.602004   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:02:26
2   7.0 48.740104   11.641433   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:04:45
3   6.5 48.744026   11.648048   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:05:11
4   6.0 48.747356   11.654539   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:05:32
5   5.5 48.749050   11.660844   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:05:50
6   5.0 48.749935   11.666812   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:06:10
7   4.5 48.751007   11.677590   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:06:54
8   4.0 48.742317   11.675558   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:08:31
9   4.5 48.736461   11.675782   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:08:55
10  5.0 48.729659   11.675481   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:09:20
11  5.5 48.725871   11.673145   0efd2316-feb9-461c-b102-045aef8e22fe    2014-03-10 08:09:35

我想繪制列val如下

import matplotlib.dates as md
fig=figure(figsize=(20,10))
ax=plt.gca()
xfmt = md.DateFormatter('%H:%M:%S')
plt.xticks( rotation=25 )
ax.xaxis.set_major_formatter(xfmt)
plt.title("Temperature")
plt.ylabel(r'Temperature, $^{o}C$')
ax.plot(datenumes,dfout.val, marker='.',lw=0)

在此輸入圖像描述

不過,我想的xlabel 08:00:0016:00:00小時按小時,所以: 08:00:0009:00:0010:00:00 ,..., 16:00:00

只需使用ax.set_xticks()選擇刻度線的位置,並為其提供為此目的創建的自定義datetime對象列表。 問題是這些對象的標簽表示是浮點數。 你可以通過創建另一個包含你想要的時間字符串的列表來解決這個問題,我在這個解決方案中稱之為ticklabels

import matplotlib.dates as md
import matplotlib.pyplot as plt
from  datetime import *

val = [6, 6.5, 7, 6.5, 6, 5.5, 5, 4.5, 4, 4.5, 5, 5.5]
datenumes = [datetime(2014, 3, 10, 8, 2, 2), 
    datetime(2014, 3, 10, 8, 2, 26), 
    datetime(2014, 3, 10, 10, 4, 45), 
    datetime(2014, 3, 10, 10, 5, 11), 
    datetime(2014, 3, 10, 12, 5, 32),
    datetime(2014, 3, 10, 12, 5, 50), 
    datetime(2014, 3, 10, 15, 6, 10), 
    datetime(2014, 3, 10, 16, 6, 54), 
    datetime(2014, 3, 10, 17, 8, 31), 
    datetime(2014, 3, 10, 18, 8, 55), 
    datetime(2014, 3, 10, 19, 9, 20), 
    datetime(2014, 3, 10, 22, 9, 35)]

# creates list of datetimes where ticks should be set
ticks = [datetime(2014, 3, 10, 8, 0, 0), 
        datetime(2014, 3, 10, 10, 0, 0),
        datetime(2014, 3, 10, 12, 0, 0),
        datetime(2014, 3, 10, 14, 0, 0),
        datetime(2014, 3, 10, 16, 0, 0),
        datetime(2014, 3, 10, 18, 0, 0),
        datetime(2014, 3, 10, 20, 0, 0),
        datetime(2014, 3, 10, 22, 0, 0) ]

# generate labels for the datetimes used as ticks
ticklabels = [str(tick)[11:] for tick in ticks]

#  PLOT
fig=plt.figure(figsize=(20,10))
ax=plt.gca()
plt.xticks( rotation=25 )

# set the ticks according to the list tick
ax.set_xticks(ticks)
##  set labels to human readable format
ax.set_xticklabels(ticklabels)

plt.title("Temperature")
plt.ylabel(r'Temperature, $^{o}C$')
ax.plot(datenumes, val, marker='.', lw=0)
plt.show()

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM