如何在同一张3D散点图中绘制两个音频文件的1D卷积输出?
问题解决:两个音频卷积结果同图散点绘制
你的问题出在循环内部重复创建了新的图表对象——每次循环都会生成一个新的fig和ax,之前的图表会被覆盖,最后plt.show()只显示最后一次循环创建的图。
修改方案很简单,把图表初始化的代码移到循环外面,循环里只负责往同一个坐标轴上添加散点数据,同时给不同文件的点用不同颜色区分:
import os import glob import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from scipy.io import wavfile path = 'C:/Users/....' # 先初始化图表和坐标轴,放在循环外面 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 准备不同颜色区分两个文件 colors = ['crimson', 'deepskyblue'] file_idx = 0 for filename in glob.glob(os.path.join(path, '*.wav')): sample_rate,audio = wavfile.read(filename) x = audio z = x.reshape(1, audio.shape[0], 1) z = tf.constant(z, dtype=tf.float32) y = tf.keras.layers.Conv1D(1, 44095, activation='relu', input_shape=(1, audio.shape[0], 1))(z) y = y.numpy() aa = y.reshape(-1) # 往同一个坐标轴上添加散点,用不同颜色 ax.scatter(np.arange(3), aa, color=colors[file_idx], label=os.path.basename(filename)) file_idx += 1 # 添加图例和标签,让图表更清晰 ax.set_xlabel('数据点索引') ax.set_ylabel('卷积输出值') ax.set_zlabel('维度') ax.legend() plt.show()
这样修改后,两个音频文件的3个卷积输出点会被绘制在同一张3D散点图上,不同颜色的点对应不同文件,图例也能帮你区分每个点属于哪个音频。
内容的提问来源于stack exchange,提问作者A. Gehani
相关产品推荐
相关产品推荐

