2
특정 매개 변수 (상한, 표본 크기) 내에서 무작위로 생성 된 숫자의 중앙값 목록에서 막대 그래프를 만드는이 프로그램이 있습니다. 생성 된 히스토그램이 눈금 바로 위의 tkinter GUI에 나타나도록하려면 어떻게해야합니까? 나는 도처에서 보았지만 여전히 그것을 파악할 수는 없다. 미리 감사드립니다! 나는 파이썬 3을 사용하고있다.matplotllib 히스토그램을 tkinter GUI에 삽입하는 방법은 무엇입니까?
보너스 질문 (답할 필요는 없지만 원한다면 1 톤 도움이된다.) : 어떻게 스케일이 number_lists의 값을 제어하도록 만들 것인가? 계산 된 중간 값을 더하여 히스토그램의 모양을 업데이트합니다.
import random
import matplotlib, sys
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
from tkinter import *
from tkinter import ttk
#root
root = Tk()
root.title("Sample Size and the Normal Distribution")
#mainframe
mainframe = ttk.Frame(root, padding = "3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
def create_list(sampleSize, upperLimit):
numbList = []
sampleSize = int(sample.get())
upperLimit = int(upper.get())
while sampleSize > 0:
sampleSize -= 1
randomNum = random.randrange(0,upperLimit+1)
numbList.append(randomNum)
numbList.sort(key=int)
return numbList
def medians_variance(median_list):
sum_of_medians = sum(median_list)
variance = sum_of_medians/len(median_list)
return variance
def median(numbList):
srtd = sorted(numbList)
mid = len(numbList)//2
if len(numbList) % 2 == 0:
return (srtd[mid-1] + srtd[mid])/2.0
else:
return srtd[mid]
def main():
number_lists = 10
lists = []
median_list = []
binsize = 10
for i in range(number_lists):
lists.append(create_list(sampleSize, upperLimit))
for current_list in lists:
current_median = median(current_list)
median_list.append(current_median)
median_list.sort(key=float)
plt.hist(median_list, binsize)
plt.xlabel('Median Value', fontsize = 15)
plt.ylabel('Frequency', fontsize = 15)
plt.show()
med = median(median_list)
std = np.std(median_list)
var = (std**2)
#sampleSize Entry
sample = StringVar()
sampleSize = ttk.Entry(mainframe, width = 7, textvariable = sample)
sampleSize.grid(column = 2, row = 1, sticky =(W, E))
#upperLimit Entry
upper = StringVar()
upperLimit = ttk.Entry(mainframe, width = 7, textvariable = upper)
upperLimit.grid(column = 2, row = 3, sticky = (W, E))
#binsize Entry
Bin = StringVar()
binsize = ttk.Entry(mainframe, width = 7, textvariable = Bin)
binsize.grid(column = 2, row = 5, sticky = (W, E))
#sampleSize and upperLimit Labels
ttk.Label(mainframe, text="Sample Size ").grid(column = 1, row = 1, sticky = W)
ttk.Label(mainframe, text="Upper Limit ").grid(column = 1, row = 3, sticky = W)
ttk.Label(mainframe, text="Bin Size").grid(column = 1, row = 5, sticky = W)
#histogram embed
f = Figure(figsize = (5,4), dpi=100)
#button for new histogram
button = ttk.Button(mainframe, text="New Histogram", command=main).grid(column=1, row=7, sticky=W)
#scale
scale = Scale(mainframe, from_=0, to=10, orient=HORIZONTAL,length=400).grid(column = 5, row = 12, sticky= S)
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
sampleSize.focus()
upperLimit.focus()
root.bind('<Return>', main)
root.mainloop()
감사합니다. 다른 곳에서 본 것보다 훨씬 쉬웠습니다. –
@JosueValverde, BTW 상호 작용하지 않습니다. 상호 작용이 필요한 경우 더 많은 코드가 필요합니다. http://pastebin.com/SJMPEtDg – falsetru
@JosueValverde, matplotlib의 [user_interfaces 예제 코드 : embedding_in_tk.py] (http://matplotlib.org/examples/user_interfaces/embedding_in_tk.html)를 참조하십시오. 대지. – falsetru