2017-03-14 39 views
1

kという3つのプロットを生成するlibraryを使用しています。Pythonのオブジェクトからデータ配列を取得する

これらのプロットを作成したデータポイント(x,y,z)を計算する必要がありますが、プロットはkの関数から来ているという問題があります。

私が使っているライブラリはpyKrigingで、thisはgithubリポジトリです。

その例codeの簡略化したバージョンである:

import pyKriging 
from pyKriging.krige import kriging 
from pyKriging.samplingplan import samplingplan 

sp = samplingplan(2) 
X = sp.optimallhc(20) 

testfun = pyKriging.testfunctions().branin 
y = testfun(X) 

k = kriging(X, y, testfunction=testfun, name='simple') 
k.train() 
k.plot() 

フルコード、コメントおよび出力hereを見出すことができます。

要約すると、これらのプロットを作成したnumpy配列を取得しようとしていますので、私の書式設定スタイルに従ったプロットを作成できます。

私はPythonでライブラリコードに入ることについて知識がありません。何か助けていただければ幸いです!

+0

あなたのフォーマットスタイルは何ですか?まずそれらを設定してから 'k.plot()'を呼ぶだけです。 – ImportanceOfBeingErnest

+0

これを見つけるために 'kringing'文書やコードを検索することを期待していますか?答えはコードにあります。これは一般的ではない質問です。 'pandas'では' .values'メソッドを使ってデータフレームから配列を取り出します。 – hpaulj

+0

この質問は 'github'または' pyKriging'サイトで直接聞​​いてください。これは複雑なコードで、@ hpauljが指摘したように、誰もコードを読んで答えを得ることはありません。 –

答えて

1

プロットを生成するデータ配列はありません。代わりに、プロットに使用される多くの配列がクリギングプロット関数内で生成されます。
塗りつぶした輪郭線を輪郭線に変更することは、もちろんスタイルオプションではありません。したがって、元のプロット関数からコードを使用する必要があります。

オプションはkrigingをサブクラス化し、カスタムプロット関数(myplotと呼ぶ)を実装することです。この機能ではcontourfの代わりにcontourを使用できます。当然ながら、それを自分のニーズに完全に変えることも可能です。

import pyKriging 
from pyKriging.krige import kriging 
from pyKriging.samplingplan import samplingplan 
import numpy as np 
import matplotlib.pyplot as plt 

class MyKriging(kriging): 
    def __init__(self,*args,**kwargs): 
     kriging.__init__(self,*args,**kwargs) 
    def myplot(self,labels=False, show=True, **kwargs): 
     fig = plt.figure(figsize=(8,6)) 
     # Create a set of data to plot 
     plotgrid = 61 
     x = np.linspace(self.normRange[0][0], self.normRange[0][1], num=plotgrid) 
     y = np.linspace(self.normRange[1][0], self.normRange[1][1], num=plotgrid) 
     X, Y = np.meshgrid(x, y) 
     # Predict based on the optimized results 
     zs = np.array([self.predict([xi,yi]) for xi,yi in zip(np.ravel(X), np.ravel(Y))]) 
     Z = zs.reshape(X.shape) 
     #Calculate errors 
     zse = np.array([self.predict_var([xi,yi]) for xi,yi in zip(np.ravel(X), np.ravel(Y))]) 
     Ze = zse.reshape(X.shape) 

     spx = (self.X[:,0] * (self.normRange[0][1] - self.normRange[0][0])) + self.normRange[0][0] 
     spy = (self.X[:,1] * (self.normRange[1][1] - self.normRange[1][0])) + self.normRange[1][0] 

     contour_levels = kwargs.get("levels", 25) 
     ax = fig.add_subplot(222) 
     CS = plt.contour(X,Y,Ze, contour_levels) 
     plt.colorbar() 
     plt.plot(spx, spy,'or') 

     ax = fig.add_subplot(221) 
     if self.testfunction: 
      # Setup the truth function 
      zt = self.testfunction(np.array(zip(np.ravel(X), np.ravel(Y)))) 
      ZT = zt.reshape(X.shape) 
      CS = plt.contour(X,Y,ZT,contour_levels ,colors='k',zorder=2, alpha=0) 

     if self.testfunction: 
      contour_levels = CS.levels 
      delta = np.abs(contour_levels[0]-contour_levels[1]) 
      contour_levels = np.insert(contour_levels, 0, contour_levels[0]-delta) 
      contour_levels = np.append(contour_levels, contour_levels[-1]+delta) 

     CS = plt.contour(X,Y,Z,contour_levels,zorder=1) 
     plt.plot(spx, spy,'or', zorder=3) 
     plt.colorbar() 

     ax = fig.add_subplot(212, projection='3d') 
     ax.plot_surface(X, Y, Z, rstride=3, cstride=3, alpha=0.4) 
     if self.testfunction: 
      ax.plot_wireframe(X, Y, ZT, rstride=3, cstride=3) 
     if show: 
      plt.show() 



sp = samplingplan(2) 
X = sp.optimallhc(20) 

testfun = pyKriging.testfunctions().branin 
y = testfun(X) 

k = MyKriging(X, y, testfunction=testfun, name='simple') 
k.train() 
k.myplot() 

enter image description here

+0

これは確かに@ImportanceOfBeingErnestの質問に対する答えです。これらのプロットを生成したデータ配列を得るために、私は 'return X、Y、Z'を追加しました。さて、私はこれらのデータ配列( 'X、Y、Z')をさらに使いたいとし、それをプロットするのは気にしないと言います。 'X'、' Y'、 'Z'などの配列を'返す 'ためにサブクラスを使う別の方法はありますか?もしそうなら、これは間違いなくこの質問とタイトルに対するより一般的な答えとなるでしょう。ありがとう! – yellow01

+1

プロットに使用される配列は 'X'、' Y'、 'Z'、' ZT'、 'Ze'です。 Theryはプロット方法で生成されます。それらが必要な場合は、カスタムプロット関数からプロットに関連するすべてを削除し、それらの配列だけを返すことができます。 – ImportanceOfBeingErnest

関連する問題