2016-08-30 2 views
1

Я новичок в программировании, python и стековом потоке, поэтому, пожалуйста, несите меня, пока я это объясняю.Обновление виджета CheckButton Matplotlib

Я пишу скрипт python, в котором есть 4 набора значений в наборе данных (a, b, c & x0). У меня есть 3 таких набора данных.

В настоящее время я пользуюсь переключателями для переключения между наборами данных, и он отлично работает.

На более позднем этапе, необходимо, чтобы отобразить сравнение распределений между наборами данных 1 & 2, 1 & 3, 2 & 3 или 1,2 возникла & 3, которые мне удалось добиться с помощью переключателей (см рис ниже)

enter image description here

Теперь я с нетерпением использовать кнопки проверки вместо радиокнопок, потому что он может позволить мне достичь того же результата, как радио-кнопки с использованием всего 3 меток (Data Set1, данные Set2, & данных Set3) вместо 7.

Однако я не знаю, как обновить кнопки проверки, чтобы заставить их выполнять сравнения.

Мой код выглядит следующим образом:

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

Добро пожаловать. –

Смежные вопросы