1
我是python新手,所以請耐心等待。 我的python腳本讀取一個文件,然後解析成一個數組。 然後它使用matplotlib庫來繪製條形圖。 由於文件'datadump.txt'中的數據不斷變化,我在腳本中添加了一個無限循環來讀取數據,解析並繪製數據。 一切工作正常。問題是,當我嘗試用鼠標重新調整窗口大小時,畫布或繪圖保持不變,並且不會重新調整爲新的窗口大小。python matplotlib canvas不重新調整尺寸
我怎樣才能得到它,使畫布重新調整到新的窗口大小?
這裏是我的Python腳本:
#! /usr/bin/python2.7
#! /usr/lib/pymodules/python2.7
import time
import matplotlib.pyplot as plt
# Global variables
fig = plt.figure()
def animated_graph():
printonce = True
while (True):
# Make sure that the file is not currently being access by another program
# If it is, then let the user know.
try:
file = open('datadump.txt', 'r')
except IOError:
if (printonce == True):
print "The file is empty or does not exist."
printonce = False
# If the file is accessible, then execute the code below
with file:
file.seek(0)
first_char = file.read(1)
if first_char:
# Extract all data and create a matrix containing string values
table = [row.strip().split('\t') for row in file]
# Close the file once the data has been extracted
file.close()
# If the table is not empty, then continue with the execution
if table:
numrow = len(table)
numcol = len(table[0])
#print ("num of rows: " + str(numrow))
#print ("num of cols: " + str(numcol))
tcp = 0
udp = 0
http = 0
dns = 0
icmp = 0
# Go thru each row and combine the total count of each protocol of for all IPs
for r in range(1, numrow):
for c in range(1, numcol):
if c==1:
tcp = tcp + int(table[r][c])
elif c==2:
udp = udp + int(table[r][c])
elif c==3:
http = http + int(table[r][c])
elif c==4:
dns = dns + int(table[r][c])
elif c==5:
icmp = icmp + int(table[r][c])
'''
print "tcp: " + str(tcp)
print "udp: " + str(udp)
print "http: " + str(http)
print "dns: " + str(dns)
print "icmp: " + str(icmp)
'''
gridnumber = range(1,6)
labels = ["tcp", "udp", "http", "dns", "icmp"]
#plt.bar(gridnumber, [tcp, udp, http, dns, icmp], color="red", width=0.4, label="Total # of connections", align="center")
plt.clf()
plt.bar(1, tcp, color="red", width=0.4, label="tcp " + str(tcp), align="center")
plt.bar(2, udp, color="green", width=0.4, label="udp " + str(udp), align="center")
plt.bar(3, http, color="blue", width=0.4, label="http " + str(http), align="center")
plt.bar(4, dns, color="brown", width=0.4, label="dns " + str(dns), align="center")
plt.bar(5, icmp, color="gold", width=0.4, label="icmp " + str(icmp), align="center")
plt.xlim([0,8])
plt.xticks(gridnumber, labels)
plt.xlabel("Protocols")
plt.ylabel("Total # of packets")
plt.title("Number of packets in a time window of 5secs")
plt.legend()
fig.canvas.draw()
#time.sleep(1)
def main():
length = 0
print "\nOpening file 'datadump.txt' "
printonce = True
while (True):
try:
length = len(open("datadump.txt").readlines())
break
except IOError:
if (printonce == True):
print "The file is empty or does not exist."
printonce = False
#print "%d lines in your choosen file" % length
win = fig.canvas.manager.window
win.after(1, animated_graph)
plt.figure(fig.number)
plt.show()
main()
請問您是否可以將此示例剪切爲包含_just_導致問題的代碼(大部分代碼看起來像是數據驅動代碼)並使其可以由其他人運行(我們沒有數據文件 - >我們無法測試任何東西)?你正在使用哪個後端,是否有某種原因試圖複製它的事件循環的工作? – tacaswell 2013-02-20 03:49:51