带有 imshow 的 matplotlib 图的 xaxis 中的日期 [英] Dates in the xaxis for a matplotlib plot with imshow

查看:30
本文介绍了带有 imshow 的 matplotlib 图的 xaxis 中的日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我是用 matplotlib 编程的新手.我使用 imshow() 和一个数组创建了一个颜色图.起初,轴只是我数组的行号和列号.我使用了 extent = (xmin,xmax,ymin,ymax) 分别得到了 unix 时间和高度的 x 轴.

So I am new to programming with matplotlib. I have created a color plot using imshow() and an array. At first the axis were just the row and column number of my array. I used extent = (xmin,xmax,ymin,ymax) to get the x-axis in unix time and altitude, respectively.

我想将 x 轴从 unix 时间 (982376726,982377321) 更改为 UT(02:25:26, 02:35:21).我在 HH:MM:SS 中创建了一个时间范围列表.我不知道如何用这些新数字替换我当前的 x 轴,而不改变颜色图(或使其消失).

I want to change the x-axis from unix time (982376726,982377321) to UT(02:25:26, 02:35:21). I have created a list of the time range in HH:MM:SS. I am not sure how to replace my current x-axis with these new numbers, without changing the color plot (or making it disappear).

我正在查看 datetime.time 但我对它感到困惑.

I was looking at datetime.time but I got confused with it.

任何帮助将不胜感激!

推荐答案

我整理了一些示例代码,可以帮助您解决问题.

I have put together some example code which should help you with your problem.

代码首先使用 numpy.random 生成一些随机数据.然后计算您的 x 限制和 y 限制,其中 x 限制将基于您问题中给出的两个 unix 时间戳,而 y 限制只是通用数字.

The code first generates some randomised data using numpy.random. It then calculates your x-limits and y-limits where the x-limits will be based off of two unix timestamps given in your question and the y-limits are just generic numbers.

然后代码绘制随机数据并使用 pyplot 方法将 x 轴格式转换为很好地表示的字符串(而不是 unix 时间戳或数组数字).

The code then plots the randomised data and uses pyplot methods to convert the x-axis formatting to nicely represented strings (rather than unix timestamps or array numbers).

代码注释得很好,应该解释你需要的一切,如果没有,请评论并要求澄清.

The code is well commented and should explain everything you need, if not please comment and ask for clarification.

import numpy as np
import matplotlib.pyplot as plt

import matplotlib.dates as mdates

import datetime as dt

# Generate some random data for imshow
N = 10
arr = np.random.random((N, N))

# Create your x-limits. Using two of your unix timestamps you first
# create a list of datetime.datetime objects using map.
x_lims = list(map(dt.datetime.fromtimestamp, [982376726, 982377321]))

# You can then convert these datetime.datetime objects to the correct
# format for matplotlib to work with.
x_lims = mdates.date2num(x_lims)

# Set some generic y-limits.
y_lims = [0, 100]

fig, ax = plt.subplots()

# Using ax.imshow we set two keyword arguments. The first is extent.
# We give extent the values from x_lims and y_lims above.
# We also set the aspect to "auto" which should set the plot up nicely.
ax.imshow(arr, extent = [x_lims[0], x_lims[1],  y_lims[0], y_lims[1]], 
          aspect='auto')

# We tell Matplotlib that the x-axis is filled with datetime data, 
# this converts it from a float (which is the output of date2num) 
# into a nice datetime string.
ax.xaxis_date()

# We can use a DateFormatter to choose how this datetime string will look.
# I have chosen HH:MM:SS though you could add DD/MM/YY if you had data
# over different days.
date_format = mdates.DateFormatter('%H:%M:%S')

ax.xaxis.set_major_formatter(date_format)

# This simply sets the x-axis data to diagonal so it fits better.
fig.autofmt_xdate()

plt.show()

这篇关于带有 imshow 的 matplotlib 图的 xaxis 中的日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆