3

在制作网格后,我试图在 y 轴上绘制 3D 图的时间。然而,日期看起来很有趣,它应该至少是 2012 年。我认为从纪元开始的秒数把事情搞砸了。

csv文件内容:

Depth (m)   15.08.2012 15:39:09 15.08.2012 16:09:10 15.08.2012 16:39:10 15.08.2012 16:43:36 15.08.2012 16:46:18
0   53.218  52.804  52.865  51.202  51.59
0.128   53.107  52.709  52.414  52.141  51.627
1.143   52.205  51.88   51.664  51.766  50.598
2.159   51.026  50.846  50.842  51.258  50.046
3.174   50.061  50.055  50.457  50.19   49.909
4.189   49.092  49.31   49.586  50.068  49.611
5.205   48.611  49.08   49.313  49.81   49.912
6.22    50.14   50.784  51.066  51.321  51.748
7.236   51.22   51.899  52.472  52.459  53.621
8.251   50.66   51.324  51.879  52.18   52.209
9.263   51.017  51.651  52.342  53.097  52.854
10.274  50.486  51.156  51.829  52.226  51.73
11.285  48.656  49.256  49.774  50.328  49.903
12.297  46.009  46.333  46.575  47.406  46.924
13.308  43.793  43.773  43.752  43.845  44.047
14.32   42.27   42.135  42.163  42.527  42.559
15.331  41.622  41.512  41.735  41.815  41.735
16.342  41.189  41.233  41.414  41.203  41.457

请注意,它是 ; 在 csv 文件中的数字之间。不能让它出现在这里。

from matplotlib import cm
from matplotlib.mlab import griddata
import matplotlib.pyplot as plt
import numpy as np
import datetime as dt
import time
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.dates import DateFormatter

fname = "C:\Users\zana.pepaj\Desktop\Temperature.csv"

depth_list = []
tempr_list = []
time_list = []

with open(fname) as fin:
   for ix, line in enumerate(fin):
       line = line.rstrip()
       line_list = line.split(';')
       if ix == 0:
           time_list = line_list[1:]
       else:
           depth_list.append(float(line_list[0]))
           tempr_list.append([float(t) for t in line_list[1:]])

timelist = []
timelist=[(time.mktime(time.strptime(x, "%d.%m.%Y %H:%M:%S"))) for x in time_list]

timetoday = time.mktime(time.localtime())

x = []
y = []
z = []
for j in range(len(time_list)):
    for i in range(len(depth_list)):
        x.append(depth_list[i])
        y.append(np.divide(timelist[j], 1000))
        z.append(tempr_list[i][j])

# Twice as wide as it is tall.
fig = plt.figure(figsize=plt.figaspect(0.5))

#---- First subplot
ax = fig.add_subplot(1, 1, 1, projection='3d')

xi = np.linspace(min(x), max(x), 10)
yi = np.linspace(min(y), max(y), 10)

X, Y = np.meshgrid(xi, yi)
Z = griddata(x, y, z, xi, yi)

ax.yaxis.set_major_formatter(DateFormatter('%H:%M:%S\n%m/%d/%y'))

#surf = ax.plot_surface(X, Y, Z, rstride=6, cstride=6, cmap=cm.jet, linewidth=0)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.gist_rainbow, linewidth=0, antialiased=False)

fig.colorbar(surf)
plt.show()

这是我得到的结果:

http://s1345.photobucket.com/user/zanapepa/media/Untitled_zps84ba310f.png.html

看到日期完全错误,它们应该是 2012 年。

4

1 回答 1

1

我认为你必须使用epoch2num. 那是:

代替

y.append(np.divide(timelist[j], 1000))

尝试

from matplotlib.dates import epoch2num
y.append(epoch2num(timelist[j]))
于 2013-05-06T12:34:32.130 回答