2016-08-30 7 views
1

私はプログラミング、Python、そしてStackFlowに慣れていますので、私はこれを説明しています。Matplotlib CheckButtonウィジェットを更新する

私はデータセット(a、b、c & x0)に4セットの値を持つpythonスクリプトを書いています。私は3つのそのようなデータセットを持っています。

現在のところ、ラジオボタンを使用してデータセットを切り替えると、正常に動作します。後の段階で

は、データ間の分布の比較を表示する必要が1 & 2,1 & 3を、設定2 & 3又は1,2 & 3が発生した私はラジオボタンを使用して達成するために管理される(以下の写真を参照)

enter image description here

私は今、それは私がちょうど3ラベル(データセット1、データSET2、&データを使用してラジオボタンと同じ結果を達成できるようにすることができますので、代わりにラジオボタンのチェックボタンを使用することを探していますSet3)の代わりに。

しかし、チェックボタンを更新して比較を実行する方法はわかりません。

私のコードは次のようになります。

import numpy as np 
print np.__version__ 
import scipy 
print scipy.__version__ 
from scipy.stats import norm, lognorm, stats, uniform 
import matplotlib 
print matplotlib.__version__ 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider, Button, RadioButtons 
from matplotlib.patches import Polygon 



#####Importing Data from csv file##### 

dataset1 = np.genfromtxt('dataSet1.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 
dataset2 = np.genfromtxt('dataSet2.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 
dataset3 = np.genfromtxt('dataSet3.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 

#####_____##### 



#####Creating Subplots##### 

fig = plt.figure() 
plt.subplots_adjust(left=0.13,right=0.99,bottom=0.05) 

ax1 = fig.add_subplot(331)             #Subplot 1 
ax1.set_xlabel('a' , fontsize = 14) 
ax1.grid(True) 

ax2 = fig.add_subplot(334)             #Subplot 2 
ax2.set_xlabel('b', fontsize = 14) 
ax2.grid(True) 

ax3 = fig.add_subplot(337)             #Subplot 3 
ax3.set_xlabel('c', fontsize = 14) 
ax3.grid(True) 

ax4 = fig.add_subplot(132)             #Subplot 4 
ax4.set_xlabel('x0', fontsize = 14) 
ax4.set_ylabel('PDF', fontsize = 14) 
ax4.grid(True) 

ax5 = fig.add_subplot(133)             #Subplot 5 
ax5.set_xlabel('x0', fontsize = 14) 
ax5.set_ylabel('CDF', fontsize = 14) 
ax5.grid(True) 

#####_____##### 



#####Plotting Distributions##### 

[n1,bins1,patches] = ax1.hist(dataset1['a'], bins=50, color = 'red',alpha = 0.5, normed = True) 
[n2,bins2,patches] = ax2.hist(dataset1['b'], bins=50, color = 'red',alpha = 0.5, normed = True) 
[n3,bins3,patches] = ax3.hist(dataset1['c'], bins=50, color = 'red',alpha = 0.5, normed = True) 
[n4,bins4,patches] = ax4.hist(dataset1['x0'], bins=50, color = 'red',alpha = 0.5, normed = True) 
dx = bins4[1] - bins4[0] 
CDF = np.cumsum(n4)*dx 
ax5.plot(bins4[1:], CDF) 

#####_____##### 



#######Creating Radio Buttons##### 

axcolor = 'lightgoldenrodyellow' 
rax = plt.axes([0.015, 0.86, 0.08, 0.13], axisbg=axcolor) 
radio1 = RadioButtons(rax, ('Data Set1', 'Data Set2', 'Data Set3', 'Data Set 1&2', 'Data Set 1&3', 'Data Set 2&3', 'Data Set 1,2&3')) 

#####_____##### 



#####Updating Radio Button##### 

radio1_label = 'Data Set1' 
func = {'Data Set1': dataset1, 'Data Set2': dataset2, 'Data Set3': dataset3, 'Data Set 1&2': dataset1, 'Data Set 1&3': dataset1, 'Data Set 2&3': dataset1, 'Data Set 1,2&3': dataset1} 
axcl = {'Data Set1': 'red', 'Data Set2': 'blue', 'Data Set3': 'green', 'Data Set 1&2': None, 'Data Set 1&3': None, 'Data Set 2&3': None, 'Data Set 1,2&3': None} 

def update_radio1(label): 
    global radio1_label    #so we can overwrite the variable defined above and not create a local one 
    radio1_label = label 
    print radio1_label 
    ax1.clear() 
    ax2.clear() 
    ax3.clear() 
    ax4.clear() 
    [n1,bins1,patches] = ax1.hist(func[radio1_label]['a'], bins=50, color = axcl[radio1_label], normed = True, alpha = 0.5) 
    [n2,bins2,patches] = ax2.hist(func[radio1_label]['b'], bins=50, color = axcl[radio1_label], normed = True, alpha = 0.5) 
    [n3,bins3,patches] = ax3.hist(func[radio1_label]['c'], bins=50, color = axcl[radio1_label], normed = True, alpha = 0.5) 
    [n4,bins4,patches] = ax4.hist(func[radio1_label]['x0'], bins=50, color = axcl[radio1_label], normed = True, alpha = 0.5) 
    ax1.grid(True) 
    ax2.grid(True) 
    ax3.grid(True) 
    ax4.grid(True) 
    ax5.grid(True) 
    if radio1_label == 'Data Set 1&2': 
     ax1.clear() 
     ax2.clear() 
     ax3.clear() 
     ax4.clear() 
     ax1.grid(True) 
     ax2.grid(True) 
     ax3.grid(True) 
     ax4.grid(True) 
     ax5.grid(True) 
     [n1,bins1,patches] = ax1.hist(dataset1['a'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset1['b'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset1['c'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset1['x0'], bins=50, color = 'red', normed = True, alpha = 0.5) 

     [n1,bins1,patches] = ax1.hist(dataset2['a'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset2['b'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset2['c'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset2['x0'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
    if radio1_label == 'Data Set 1&3': 
     ax1.clear() 
     ax2.clear() 
     ax3.clear() 
     ax4.clear() 
     ax1.grid(True) 
     ax2.grid(True) 
     ax3.grid(True) 
     ax4.grid(True) 
     ax5.grid(True) 
     [n1,bins1,patches] = ax1.hist(dataset1['a'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset1['b'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset1['c'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset1['x0'], bins=50, color = 'red', normed = True, alpha = 0.5) 

     [n1,bins1,patches] = ax1.hist(dataset3['a'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset3['b'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset3['c'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset3['x0'], bins=50, color = 'green', normed = True, alpha = 0.5) 
    if radio1_label == 'Data Set 2&3': 
     ax1.clear() 
     ax2.clear() 
     ax3.clear() 
     ax4.clear() 
     ax1.grid(True) 
     ax2.grid(True) 
     ax3.grid(True) 
     ax4.grid(True) 
     [n1,bins1,patches] = ax1.hist(dataset2['a'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset2['b'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset2['c'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset2['x0'], bins=50, color = 'blue', normed = True, alpha = 0.5) 

     [n1,bins1,patches] = ax1.hist(dataset3['a'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset3['b'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset3['c'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset3['x0'], bins=50, color = 'green', normed = True, alpha = 0.5) 
    if radio1_label == 'Data Set 1,2&3': 
     ax1.clear() 
     ax2.clear() 
     ax3.clear() 
     ax4.clear() 
     ax1.grid(True) 
     ax2.grid(True) 
     ax3.grid(True) 
     ax4.grid(True) 
     [n1,bins1,patches] = ax1.hist(dataset1['a'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset1['b'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset1['c'], bins=50, color = 'red', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset1['x0'], bins=50, color = 'red', normed = True, alpha = 0.5) 

     [n1,bins1,patches] = ax1.hist(dataset2['a'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset2['b'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset2['c'], bins=50, color = 'blue', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset2['x0'], bins=50, color = 'blue', normed = True, alpha = 0.5) 

     [n1,bins1,patches] = ax1.hist(dataset3['a'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n2,bins2,patches] = ax2.hist(dataset3['b'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n3,bins3,patches] = ax3.hist(dataset3['c'], bins=50, color = 'green', normed = True, alpha = 0.5) 
     [n4,bins4,patches] = ax4.hist(dataset3['x0'], bins=50, color = 'green', normed = True, alpha = 0.5) 



    plt.draw() 



radio1.on_clicked(update_radio1) 

#####_____##### 




plt.show() 

あなたの援助は非常に理解されるであろう。

ありがとうございます。

答えて

1
import numpy as np 
print np.__version__ 
import scipy 
print scipy.__version__ 
import matplotlib 
print matplotlib.__version__ 
import matplotlib.pyplot as plt 
from matplotlib.widgets import CheckButtons 


#####Importing Data from csv file##### 

dataset1 = np.genfromtxt('dataSet1.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 
dataset2 = np.genfromtxt('dataSet2.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 
dataset3 = np.genfromtxt('dataSet3.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 

#####_____##### 


#####Creating Subplots##### 

fig = plt.figure() 
plt.subplots_adjust(left=0.13,right=0.99,bottom=0.05) 

ax1 = fig.add_subplot(331)             #Subplot 1 
ax1.set_xlabel('a' , fontsize = 14) 

ax2 = fig.add_subplot(334)             #Subplot 2 
ax2.set_xlabel('b', fontsize = 14) 

ax3 = fig.add_subplot(337)             #Subplot 3 
ax3.set_xlabel('c', fontsize = 14) 

ax4 = fig.add_subplot(132)             #Subplot 4 
ax4.set_xlabel('x0', fontsize = 14) 
ax4.set_ylabel('PDF', fontsize = 14) 

ax5 = fig.add_subplot(133)             #Subplot 5 
ax5.set_xlabel('x0', fontsize = 14) 
ax5.set_ylabel('CDF', fontsize = 14) 
ax5.grid(True) 

#####_____##### 

radio1_label = 'Data Set1' 

properties = [ 
    ['Data Set1', dataset1, 'red'], 
    ['Data Set2', dataset2, 'blue'], 
    ['Data Set3', dataset3, 'green'] 
] 
func = {} 
axcl = {} 
flags = {} 
for p in properties: 
    func[p[0]] = p[1] 
    axcl[p[0]] = p[2] 
    flags[p[0]] = p[0] == 'Data Set1' 

#####Plotting Distributions##### 
def plot_hists(): 
    ax1.clear() 
    ax2.clear() 
    ax3.clear() 
    ax4.clear() 
    for p in properties: 
     lbl = p[0] 
     ax1.hist(func[lbl]['a'], bins=50, color=axcl[lbl], normed=True, alpha=0.5, visible=flags[lbl]) 
     ax2.hist(func[lbl]['b'], bins=50, color=axcl[lbl], normed=True, alpha=0.5, visible=flags[lbl]) 
     ax3.hist(func[lbl]['c'], bins=50, color=axcl[lbl], normed=True, alpha=0.5, visible=flags[lbl]) 
     n4, bins4, patches = ax4.hist(func[lbl]['x0'], bins=50,color=axcl[lbl], normed=True, alpha=0.5, visible=flags[lbl]) 
    ax1.grid(True) 
    ax2.grid(True) 
    ax3.grid(True) 
    ax4.grid(True) 
    return n4, bins4 

n4, bins4 = plot_hists() 
dx = bins4[1] - bins4[0] 
CDF = np.cumsum(n4)*dx 
ax5.plot(bins4[1:], CDF) 

#######Creating Check Buttons##### 

axcolor = 'lightgoldenrodyellow' 
rax = plt.axes([0.015, 0.86, 0.08, 0.13], axisbg=axcolor) 

check = CheckButtons(rax, ('Data Set1', 'Data Set2', 'Data Set3'), (True, False, False)) 
#####_____##### 



#####Updating Check Button##### 

def update_check1(label): 
    global radio1_label    #so we can overwrite the variable defined above and not create a local one 
    radio1_label = label 
    print radio1_label 

    flags[label] = not flags[label] 

    plot_hists() 
    ax5.grid(True) 

    plt.draw() 

check.on_clicked(update_check1) 
#####_____##### 




plt.show() 
+0

あなたは救い主です。それはまさに私がやりたかったことです。これについて専門家の助けを借りて本当に感謝します。私はあなたが何をしたのかを理解するためにコードを今すぐ調べます。再度、感謝します!! :-) –

+0

よろしくお願いします。 –

関連する問題