2017-05-18 5 views
0

I現在のプロットに似てnumpyのを作成しようとしています...数字の配列としてプロットを再作成できませんか?

MVCE:

# 
# MVCE version 
# 


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 
import ast 
import urllib 
import os 
import sys 
from os import listdir 
from os.path import isfile, join 

min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,1)) 

def make_plot_store_data(name,interweaved,static,delta,delta_delta,isTrain,isTest,isDev): 

    print static.shape 
    print type(static) 
    print np.min(static) 
    print np.max(static) 
    fig = plt.figure() 

    librosa.display.specshow(static.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet) 
    #plt.axis('off') 
    plt.title("log mel power spectrum of " + name) 
    plt.colorbar(format='%+02.0f dB') 
    plt.tight_layout() 

    if isTrain == True: 
     plt.figure() 
     convert = plt.get_cmap(cm.jet) 
     numpy_output_static = convert(min_max_scaler.fit_transform(np.flipud(static.T))) 
     plt.imshow(numpy_output_static,aspect = 'auto') 
     plt.show() 
     raw_input("sadas") 

link = "https://gist.githubusercontent.com/Miail/51311b34f5e5333bbddf9cb17c737ea4/raw/786b72477190023e93b9dd0cbbb43284ab59921b/feature.txt" 
f = urllib.urlopen(link) 

#Loading data 
temp_list = [] 
for line in f: 
    entries = 0 
    data_splitted = line.split() 
    if len(data_splitted) == 2: 
      file_name = data_splitted[0] 
    else: 
     entries = 1+entries 
     if data_splitted[-1] == ']': 
      temp_list.extend([ast.literal_eval(i) for i in data_splitted[:-1]]) 
     else: 
      temp_list.extend([ast.literal_eval(i) for i in data_splitted]) 

#Reformatting data 
dimension = 120 
entries = len(temp_list)/dimension 
data = np.array(temp_list) 
interweaved = data.reshape(entries,dimension) 
static =interweaved[:,:-80] 
delta =interweaved[:,40:-40] 
delta_delta =interweaved[:,80:] 
plot_interweaved = data.reshape(entries*3,dimension/3) 
print static.shape 
print delta.shape 
print delta_delta.shape 
make_plot_store_data(file_name,plot_interweaved,static,delta,delta_delta,True,False,False) 

は、このコードを実行する2つのプロットを作成します。..最初のバージョンはlibrosaを使用してプロットされている、と他の1つはカラーマップcm.jetを使用して各ピクセル値を抽出します。

問題は、実行されているものが同じであっても、両方のプロットが同じでないことです。 librosa.display.specshowpcolormeshを使用してプロットを作成するので、何もバイアスしてはいけません。

しかし、私が見るのプロットは、次のとおりです。

enter image description here

、再作成プロットします:

enter image description here

、何が間違っている。ここ

がlibrosaで作成した実際のプロットであります?すべての

答えて

2

まず、

plt.imshow(static.T, cmap=plt.cm.jet, aspect="auto", origin="lower") 

はあなたの希望のプロットを与えるので、カラーマップとは何の問題もありません。

第2に、わからない正規化を使用しないでください。ここではmy answer to your previous questionを繰り返すだけで、データの最小値と最大値に正規化するように指示できます。

import matplotlib.colors 
cmap = plt.cm.jet 
norm = matplotlib.colors.Normalize(vmin=static.min(),vmax=static.max()) 
newdata = cmap(norm(static.T)) 
plt.imshow(newdata, aspect="auto", origin="lower") 
関連する問題