【问题标题】:Python: How to add datetime to x-axis in pcolormeshPython:如何在 pcolormesh 中将日期时间添加到 x 轴
【发布时间】:2016-03-17 21:16:48
【问题描述】:

使用 matplotlib 散点图或折线图,我可以将 x 轴指定为日期时间数组。

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

size = 10

# List of Dates
base = datetime.today()
date_list = [base - timedelta(weeks=x) for x in range(0, size)]

plt.figure(1)
a = np.random.random([size])
plt.plot(date_list,a)
plt.xticks(rotation=45)

我想制作一个以日期时间为 x 轴的 pcolormesh 图,但出现错误

这可行,但不是我想要的......

b = np.random.random([size,size])
plt.figure(2)
c = np.arange(0,size)
plt.pcolormesh(c,c,b)

这会引发错误...

plt.figure(3)
plt.pcolormesh(date_list,c,b)

如果您无法使用 datetime 数组提供 pcolormesh,是否有另一种方法可以将 x 轴格式化为日期?

更新

这个问题似乎已经在 matplotlib 的更新版本中得到解决。现在可以向 pcolormesh xaxis 添加日期时间(版本 3.4.3)

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

size = 10

b = np.random.random([size, size])

# List of Dates
base = datetime.today()
date_list = [base - timedelta(hours=x) for x in range(0, size)]

c = np.arange(0,size)

plt.pcolormesh(date_list, c, b, shading='auto')
plt.xticks(rotation=45)

【问题讨论】:

    标签: python datetime matplotlib


    【解决方案1】:

    这是一个工作示例:

    from datetime import datetime, timedelta
    import numpy as np
    import matplotlib.pyplot as plt
    
    size = 20
    
    base = datetime.today()
    
    x_axis = [base - timedelta(weeks=x) for x in range(0, size)]
    y_axis = np.arange(0,size)
    data = np.random.random([size,size])
    
    plt.pcolormesh(x_axis, y_axis, data, shading='auto')
    plt.xticks(rotation=45)
    plt.subplots_adjust(left=None, bottom=0.2, right=None, top=None, wspace=None, hspace=None)
    plt.show()
    

    【讨论】:

      【解决方案2】:

      我刚刚发现您可以在np.meshgrid 中使用像dtype 这样的日期时间。

      这意味着您不必手动格式化时间轴。此外,当您放大绘图时,时间轴也会自动缩放。

      plt.pcolormesh(
          *np.meshgrid(time_array, y_axis_array),
          data_2D_array
      )
      

      这里的time_array.dtype 是一个类似日期时间的对象。到目前为止,我已经尝试过使用pd.Timestamp,我的猜测是它应该也适用于其他人

      【讨论】:

        【解决方案3】:

        类似这样的:

        from datetime import datetime, timedelta
        import numpy as np
        import matplotlib.pyplot as plt
        
        size = 10
        
        # List of Dates
        base = datetime.now()
        date_list = [base - timedelta(weeks=x) for x in range(0, size)]
        date_list = [i.strftime("%Y %m %d") for i in date_list]
        
        b = np.random.random([size,size])
        plt.figure(2)
        c = np.arange(0,size)
        plt.pcolormesh(c,c,b)
        plt.xticks(c, date_list, rotation='vertical')
        plt.subplots_adjust(bottom=0.2)
        plt.show()
        

        【讨论】:

        • 你的日期看起来有点滑稽。%M“分钟作为一个零填充的十进制数”,对于月份,你需要 %m月份作为一个零填充的十进制数)
        • @Bart。哦耶。我希望现在没事。
        • 谢谢!环顾四周寻求更多帮助后,听起来 pcolormesh 只是有日期时间问题。这是添加日期的最简单方法——使用 xticks 标记。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        • 2017-12-15
        • 2021-01-27
        • 2020-07-21
        • 1970-01-01
        • 2020-11-29
        相关资源
        最近更新 更多