matplotlib图中几乎没有错误

时间:2017-07-20 18:31:53

标签: python matplotlib subplot

我正在制作一个程序,搜索特定目录中的所有声音文件并将其删除。这是我的代码:

import os, sys, time, threading
from Tkinter import *
import Tkinter, Tkconstants, tkFileDialog
import shutil
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
import csv, time


home1 = os.path.join(os.environ["HOMEPATH"], "Desktop")
desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')

print "Welcome to SoundScanner!"
print "Select directory to scan from:\n"

mp3_list = []
mp4_list = []
avi_list = []
mov_list = []
wmv_list = []
ogg_list = []
wav_list = []

all_sound_list = []

root = Tk()
root.withdraw()
path = tkFileDialog.askdirectory(initialdir=desktop, title="Select directory to scan from: ")
path = path.encode('utf-8')


mpl.rcParams['toolbar'] = 'None' 

for root, dirs, files in os.walk(path):
    for filez1 in files:
        if filez1.endswith(".mp3"):
            mp3_list.append(filez1)
            all_sound_list.append(filez1)

for root, dirs, files in os.walk(path):
    for filez2 in files:
        if filez2.endswith(".mp4"):
            mp4_list.append(filez2)
            all_sound_list.append(filez2)

for root, dirs, files in os.walk(path):
    for filez3 in files:
        if filez3.endswith(".avi"):
            avi_list.append(filez3)
            all_sound_list.append(filez3)

for root, dirs, files in os.walk(path):
    for filez4 in files:
        if filez4.endswith(".mov"):
            mov_list.append(filez4)
            all_sound_list.append(filez4)

for root, dirs, files in os.walk(path):
    for filez5 in files:
        if filez5.endswith(".wmv"):
            wmv_list.append(filez5)
            all_sound_list.append(filez5)

for root, dirs, files in os.walk(path):
    for filez6 in files:
        if filez6.endswith(".ogg"):
            ogg_list.append(filez6)
            all_sound_list.append(filez6)

for root, dirs, files in os.walk(path):
    for filez7 in files:
        if filez7.endswith(".wav"):
            wav_list.append(filez7)
            all_sound_list.append(filez7)

print "Searching for sound files..."


objects = ('.MP3', '.MP4', '.AVI', '.MOV', '.WMV', '.OGG', '.WAV')
y_pos = np.arange(len(objects))

if len(all_sound_list) == 0:
    print "No sound files found. Have a good day!"
    sys.exit()

x = raw_input('Press b for a bar chart or t for a table to display the sound files: ')

if x == "b":

    plt.title('Sound Files Bar Chart')

    performance = [len(mp3_list),len(mp4_list),len(avi_list),len(mov_list),len(wmv_list),len(ogg_list), len(wav_list)]
    plt.bar(y_pos, performance, align='center', alpha=0.5)
    plt.xticks(y_pos, objects)
    plt.ylabel('Number of sound files')
    plt.title('Sound File Formats')

elif x == "t":

    fig = plt.title("Sound Files Table") 

    data = [[len(mp3_list),len(mp4_list),len(avi_list),len(mov_list),len(wmv_list),len(ogg_list), len(wav_list)]]

    fig, ax = plt.subplots()

    ax.xaxis.set_visible(False) 
    ax.yaxis.set_visible(False)

    clust_data = tuple(data)
    collabel=(".MP3", ".MP4", ".AVI", ".MOV", ".WMV", ".OGG", ".WAV")
    ax.table(cellText=clust_data,colLabels=collabel,loc='center')

def show():
    plt.show()

if x == "b":
    thread = threading.Thread(target=show)
    thread.start()

elif x == "t":
    thread = threading.Thread(target=show)
    thread.start()


c = raw_input('Do you want to export to csv?(y/n) ')
if c == 'y':


    output = open('sound files.csv', 'w')
    output_writer = csv.writer(output)
    output_writer.writerow(['MP3 Files:' + ' ' + str(len(mp3_list))])
    output_writer.writerow(['MP4 Files:' + ' ' + str(len(mp4_list))])
    output_writer.writerow(['AVI Files:' + ' ' + str(len(avi_list))])
    output_writer.writerow(['MOV Files:' + ' ' + str(len(mov_list))])
    output_writer.writerow(['WMV Files:' + ' ' + str(len(wmv_list))])
    output_writer.writerow(['OGG Files:' + ' ' + str(len(ogg_list))])
    output_writer.writerow(['WAV Files:' + ' ' + str(len(wav_list))])

    output.close()
    print "Successfully exported sound files to " + str(os.getcwd()) + "\sound files.csv"

elif c == 'n':
    print "Sound files not exported to csv"


print ""
q = raw_input('Do you wish to proceed in remove these sound files?(y/n) ')
if str(q) == "y" or str(q) == "Y":
    q2 = raw_input("WARNING: This will permanently remove all sound files from the selected directory. Are you sure you want to continue?(y/n) ")
    if str(q2) == "y" or str(q2) == "Y":
        for i in range(len(all_sound_list)):
            os.remove(os.path.join(root, all_sound_list[i]))
            if len(all_sound_list) >= 2:
                print 'Successfully deleted sound files.'
            elif len(all_sound_list) < 2:
                print 'Successfully deleted sound file.'
    elif str(q2) == "n" or str(q2) == "N":
        print "Sound files not deleted."
        time.sleep(1)
        sys.exit()
elif str(q) == "n" or str(q) == "N":
    print 'Sound files not deleted.'
    time.sleep(1)
    sys.exit()

sys.exit()

问题在于,当我选择表格选项时,它会显示表格图,但它也会在单独的窗口中显示条形图。任何人都可以解决这个问题吗?

另外, 我正在尝试创建一个选项,您可以在单个窗口上查看条形图和表作为子图。可以这样做吗?如果是这样,你能提供代码吗?感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以先创建plt.figure(),然后使用ax = plt.subplot(1,2,1)添加子图,其中前两个数字是子图的维度,最后一个是当前子图的位置(第二个是你想要的)做plt.subplot(1,2,2))。然后在创建所有子图后执行plt.show()