1

我正在使用matplotlib'scontourf函数将z数据显示为x和的函数y。如果和是一维数组,我可以使用对象numpy数组datetime作为 x 轴。但是,当我将我的和数组设为二维时,会在二维对象数组上中断。示例如下:xyxycontourfdatetime

import numpy as np
from datetime import datetime,timedelta
import matplotlib.pyplot as plt

x = np.array([datetime(2012,12,12),datetime(2012,12,13),datetime(2012,12,14)])
y = np.arange(10)
z = np.random.random((10,3))

plt.contourf(x,y,z)

此示例有效并产生了预期的结果。但是,如果我这样做:

x = np.tile(np.reshape(x,( 1,3)),(10,1))
y = np.tile(np.reshape(y,(10,1)),( 1,3))

所以x,yz都是 shape (10,3)contourf(x,y,z)产生这个回溯:

Traceback (most recent call last):
  File "./test_2d_datetime.py", line 14, in <module>
    plt.contourf(x,y,z)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/matplotlib/pyplot.py", line 2206, in contourf
    ret = ax.contourf(*args, **kwargs)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/matplotlib/axes.py", line 7322, in contourf
    return mcontour.QuadContourSet(self, *args, **kwargs)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/matplotlib/contour.py", line 1106, in __init__
    ContourSet.__init__(self, ax, *args, **kwargs)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/matplotlib/contour.py", line 700, in __init__
    self._process_args(*args, **kwargs)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/matplotlib/contour.py", line 1119, in _process_args
    x, y, z = self._contour_args(args, kwargs)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/matplotlib/contour.py", line 1166, in _contour_args
    x,y,z = self._check_xyz(args[:3], kwargs)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/matplotlib/contour.py", line 1194, in _check_xyz
    x = np.asarray(x, dtype=np.float64)
  File "/home/disk/mako/milan/epd/epd-7.3-1-rh5-x86_64/lib/python2.7/site-packages/numpy/core/numeric.py", line 235, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number

如果我使用二维值数组matplotlib.dates.date2num()而不是datetime对象,contourf()则按预期工作。

我遇到的问题有补救措施吗?我在 64 位 Linux 上使用 Python2.7.3和 matplotlib 。1.1.0

4

0 回答 0