2017-11-11 19 views
1

グラフにデータを表示する際に問題があります。グラフフレームは表示されますが、グラフは表示されません。あなたは助けてもらえますか?python 3空のグラフ

私は、x軸とデータの次元が同じであることを確認しました...私はなぜグラフを返さないのか分かりません。

ありがとうございます。

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.stats import norm 


n = 1000 
theta = 0.8 

d = np.sqrt(1-theta**2) 

def p(x,y): 
    "Stochastic kernel for the TAR model" 
    return norm().pdf((y-theta*np.abs(x))/d)/d 


Z = norm().rvs(n) 
X = np.empty(n) 

for t in range(n-1): 
    X[t+1] = theta*np.abs(X[t])+d*Z[t+1] 


n = len(X) 
X = X.reshape((n, 1)) 

ys = np.linspace(-3,3,200) 
k = len(ys) 
ys = ys.reshape((1,k)) 

v = p(X,ys) 
kernel = np.mean(v, axis=0)  
h = len(kernel) 
kernel = kernel.reshape((1,h)) 


fig, ax = plt.subplots(figsize=(10,7)) 
ax.plot(ys,kernel, 'b-', lw=2,alpha=0.6, label='look ahead estimate') 
plt.show() 

答えて

0

問題は、それぞれ1X kまたは1x hアレイへの2つの1次元配列yskernel整形を通じて最初の寸法が明らかに1 plot関数である2次元配列を取得、あります最初の次元だけを反復するので、プロットに何も表示されません。私はそれを修正するには、2つの簡単なオプションを考えることができ :

  1. は、変数を再形成kernelysないでください:

    # ... continuing your code ... 
    ys = np.linspace(-3,3,200) 
    k = len(ys) 
    #ys = ys.reshape((1,k)) 
    
    v = p(X,ys) 
    kernel = np.mean(v, axis=0)  
    h = len(kernel) 
    #kernel = kernel.reshape((1,h)) 
    
    
    fig, ax = plt.subplots(figsize=(10,7)) 
    ax.plot(ys,kernel, 'b-', lw=2,alpha=0.6, label='look ahead estimate') 
    plt.show() 
    
  2. は、このようなあなたのプロット関数を呼び出します。

    ax.plot(ys[0],kernel[0], 'b-', lw=2, alpha=0.6, label='look ahead estimate') 
    

これがあなたの問題を解決することを願っています。

てみましょう最初の次元の面であなたの関数p(x,y)を理解する:図について

def p(x,y): 
    "Stochastic kernel for the TAR model" 
    """If x is not reshaped, you substract two one-dimensional arrays from each other, 
    which have not the same dimensions (dim(x) == 1000, dim(y) == 200 in your case). 
    This throws an error. 
    If you reshape X before passing to this function, the y array is substracted 
    element-wise by each of the values of X, which gives you a matrix with dimension 
    dim(x) x dim(y). 
    """ 
    return norm().pdf((y-theta*np.abs(x))/d)/d 

次元状にここに何が起こるか:

それでもXを再構築する必要がある理由を理解することは

>>> X = np.array([[1], [2], [3], [4]]) >>> Y = np.array([1, 2, 3]) >>> Y-X array([[ 0, 1, 2], [-1, 0, 1], [-2, -1, 0], [-3, -2, -1]]) 

ここで、が返す行列がどうなるかを見てみましょう:

vは、p(X,ys)から返された行列であるように動作し、マトリックスvの行にわたってそのnp.mean反復及び行列の各「行ベクトル」の平均値を算出np.mean(v, axis=0)kernel、の計算。これにより、ysをプロットすることができる1次元配列(次元ys)が得られます。

+0

ありがとうございました...現在は動作しています。私はあなたが提案したことをしました。カーネルとysを再構成しませんでした。私は実際にそれを動作させるためにまだXを再構成しなければならない理由を理解するのに実際に苦労しています。あなたは知っていますか ? – terman

+0

私は最終的にあなたのコードで何が起こったかを理解し、解答を編集して、コメントよりも理解しやすい(うまくいけば)説明することができたと思います。私はあなたがなぜXを再構成しなければならないのか、今やysとカーネルではないことが明らかになったと思います:) – jmartin

関連する問題