我试图绘制一个形状为(x,88,1)的张量,其中x约为10,000。 x处的每个值都是一个时间点,间隔为.028秒。
如何使用matplotlib将x的值绘制为以分钟为单位的时间?目前,我的图表显示为
示例代码
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一直在生成结果,绘制日期,这不是我所需要的,因此我在这里问。
答案 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()
答案 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)
图形: