横纵坐标显示时间和空间后,第三个数据的特征有时就不好表示了,3d图有的时候看起来更复杂。对于某些情况,用颜色来表示更加简洁。
这里展示的效果图有点像烟花,所以选了这张,但是换其他的cmap才能使得数据展示更加直观
先放一个快捷简洁版本,后面将细节(高级定制版😂)。
import numpy as np
import matplotlib.pyplot as pltdef main():data = np.loadtxt('文件路径', delimiter=',')cmap = plt.cm.viridisplt.imshow(data, cmap=cmap, interpolation='nearest', aspect='auto')plt.colorbar(label='Z轴数值')plt.xlabel('空间位置')plt.ylabel('时间')plt.close()if __name__ == "__main__":main()
import numpy as np
import matplotlib.pyplot as pltdef main():# 从文本文件中读取数据# loadtxt要求文件每一行数据的格式相同,会读取为矩阵的格式# delimiter:数据之间的分隔符# 还有其他的选项,比如跳过前n行、如果行的开头为指定标志就会跳过该行、是指只使用指定列,参数类型为list、对数据进行预处理data = np.loadtxt('data.log', delimiter=',')# 仅保留所需的图片里纵坐标区域(因为之后我需要转置矩阵,其实就是对目前矩阵的列做切片)start_col = 1end_col = 2001 # 注意,切片操作不包括结束索引的元素,所以这里设为1001以保留第1000列(还没转置所以是列)data = data[:, start_col:end_col]# 同理,切片矩阵行start_row = 400end_row = 900data = data[start_row:end_row, :]# 根据需要矩阵转置data = data.T# 创建颜色映射inferno viridis OrRd(还有更多可选)cmap = plt.cm.OrRd# 调整图像尺寸fig, ax = plt.subplots(figsize=(24, 32))# 绘制2D图片plt.imshow(data, cmap=cmap, interpolation='nearest', aspect='auto')# 创建颜色条cbar = plt.colorbar(label='access times') # 颜色代表的含义cbar.ax.tick_params(labelsize=20) # 设置刻度字体大小cbar.set_label('access times', fontsize=20) # 设置内容字体大小# 设置纵坐标刻度num_rows, _ = data.shapey_ticks_interval = 200 # 设置刻度间隔plt.yticks(np.arange(0, num_rows, y_ticks_interval), fontsize=20)plt.xticks(fontsize=20)# 设置坐标轴标签plt.xlabel('epochs', fontsize=20)plt.ylabel('fpn', fontsize=20)# 显示图像plt.show()plt.close()if __name__ == "__main__":main()