简体   繁体   English

使用imshow在xaxis中为matplotlib绘制日期

[英]Dates in the xaxis for a matplotlib plot with imshow

So I am new to programming with matplotlib. 所以我是使用matplotlib进行编程的新手。 I have created a color plot using imshow() and an array. 我使用imshow()和数组创建了一个颜色图。 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. 我使用extent =(xmin,xmax,ymin,ymax)分别得到unix时间和海拔高度的x轴。

I want to change the x-axis from unix time (982376726,982377321) to UT(02:25:26, 02:35:21). 我想将x轴从unix时间(982376726,982377321)更改为UT(02:25:26,02:35:21)。 I have created a list of the time range in HH:MM:SS. 我已经创建了一个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). 我不知道如何用这些新数字替换我当前的x轴,而不改变颜色图(或使其消失)。

I was looking at datetime.time but I got confused with it. 我正在看datetime.time,但我对此感到困惑。

Any help would be greatly appreciated! 任何帮助将不胜感激!

I have put together some example code which should help you with your problem. 我已经汇总了一些示例代码,可以帮助您解决问题。

The code first generates some randomised data using numpy.random . 代码首先使用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. 然后计算x限制和y限制,其中x限制将基于您的问题中给出的两个unix时间戳,而y限制只是通用数字。

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). 然后代码绘制随机数据,并使用pyplot方法将x轴格式转换为精美表示的字符串(而不是unix时间戳或数组编号)。

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()

示例图

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM