以x轴为时间绘制图像

时间:2018-09-30 02:03:43

标签: python matplotlib

我试图绘制一个形状为(x,88,1)的张量,其中x约为10,000。 x处的每个值都是一个时间点,间隔为.028秒。

如何使用matplotlib将x的值绘制为以分钟为单位的时间?目前,我的图表显示为

enter image description here

示例代码

    plt.imshow(missing, aspect='auto', origin='lower', cmap='gray_r', vmin=0, vmax=1)
    plt.figure(1, figsize=(8.5, 11))
    plt.xlabel('Sample #')
    plt.colorbar()
    plt.clf()

Google一直在生成结果,绘制日期,这不是我所需要的,因此我在这里问。

2 个答案:

答案 0 :(得分:2)

您可以先将图像范围设置为数据覆盖的秒数范围。然后,您可以使用FuncFormatter将秒格式为分钟:秒。然后,您可以将刻度线的位置设置为漂亮的数字,例如间隔30秒。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

data = np.random.rand(88, 10000)

interval = .028  # seconds
extent = [0, data.shape[1]*interval, 0, data.shape[0]]

plt.imshow(data, extent=extent, aspect='auto', origin='lower', 
           cmap='gray_r', vmin=0, vmax=1)

# Format the seconds on the axis as min:sec
def fmtsec(x,pos):
    return "{:02d}:{:02d}".format(int(x//60), int(x%60)) 
plt.gca().xaxis.set_major_formatter(mticker.FuncFormatter(fmtsec))
# Use nice tick positions as multiples of 30 seconds
plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(30))

plt.xlabel('Time')
plt.colorbar()
plt.show()

enter image description here

答案 1 :(得分:1)

Plots and Images with datetimes on the x-axis

如果在开始时将x轴设置为日期时间数字,则不需要格式化@Async public void asyncMethodWithVoidReturnType() { System.out.println("Execute method asynchronously. " + Thread.currentThread().getName()); } 的自定义函数。两种解决方案都类似于Dates in the xaxis for a matplotlib plot with imshow

进口:

%M:%S

x轴:

import numpy as np
import datetime as dt
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

y轴:

x = [dt.datetime(2018, 9, 30, 0, 0, 0, 0) + dt.timedelta(seconds=(0.028 * 10000 * x)) for x in range(0, 2)]
x = mdates.date2num(x)

情节:

y = np.random.rand(88, 10000)

图形:

Tensor Plot