Python 如何将pcolormesh plot存储为numpy数组,同时保留数据形状?
我似乎在存储使用matplotlib.pcolormesh创建的绘图时遇到了一些问题。据我所知,pcolormesh使用颜色映射转换输入数据矩阵。colormap为矩阵中的每个条目输出RGB值,并对其进行打印 在我的脑海里,这和Python 如何将pcolormesh plot存储为numpy数组,同时保留数据形状?,python,numpy,matplotlib,plot,visualization,Python,Numpy,Matplotlib,Plot,Visualization,我似乎在存储使用matplotlib.pcolormesh创建的绘图时遇到了一些问题。据我所知,pcolormesh使用颜色映射转换输入数据矩阵。colormap为矩阵中的每个条目输出RGB值,并对其进行打印 在我的脑海里,这和 import numpy as np import matplotlib.pyplot as plt import matplotlib from PIL import Image import librosa import librosa.display from m
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from PIL import Image
import librosa
import librosa.display
from matplotlib import cm
fig = plt.figure(figsize=(12,4))
min = -1.828067
max = 22.70058
data = np.random.uniform(low=min, high=max, size=(474,40))
librosa.display.specshow(data.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet)
plt.axis('off')
plt.show()
raw_input("sadas")
convert = plt.get_cmap(cm.jet)
norm = matplotlib.colors.Normalize(vmin=0,vmax=1)
numpy_output_static = convert(norm(data.T))
plt.imshow(numpy_output_static,cmap = cm.jet, aspect = 'auto')
plt.show()
raw_input("asds")
这里的问题是,被表示为绘图的数据的numpy数组与第一个绘图显示的不相似。我需要numpy有代表绘图的数据,这样如果我想绘图,我会得到与第一个相同的图像,numpy数组的形状应该与绘图1中使用的输入数据相似
numpy被输入到神经网络,用于检测模式,这意味着表示在这里很重要
那么,我如何让它存储实际的情节,而没有所有红色的东西
如果这在matplotlib中不可能,那么在哪个库中也可以这样做呢 数据范围从-1.828067到22.70058。但是,在第二个绘图中,将其剪切到vmin=0和vmax=1之间的范围。因此,所有大于1的数据将在imshow图中显示为红色
如果你使用
norm = matplotlib.colors.Normalize(vmin=-1.828067,vmax=22.70058)
你应该得到原始数组
请注意,如果不将数据转换为颜色数组,结果应该是相同的,因此整个转换可能是不必要的,您可以简单地进行
plt.imshow(data.T,cmap = cm.jet, aspect = 'auto')
我最后做的是:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from PIL import Image
import librosa
import librosa.display
from matplotlib import cm
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
fig = plt.figure(figsize=(12,4))
min = -1.828067
max = 22.70058
data = np.random.uniform(low=min, high=max, size=(474,40))
librosa.display.specshow(data.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet)
plt.axis('off')
plt.show()
#raw_input("sadas")
convert = plt.get_cmap(cm.jet)
data = min_max_scaler.fit_transform(data)
print data.min()
print data.max()
numpy_output_static = convert(data.T)
plt.imshow(numpy_output_static, aspect = 'auto')
plt.show()
#raw_input("asds")
我可能曾经有点不正确地使用了normalize函数,并认为normalize将处理输入数据,但事实似乎并非如此。所以我在绘制图之前用Sklearn将其归一化
然后利用cmap
结果是: