Создание графиков с помощью matplotlib в цикле for и сохранение местоположения щелчка мыши для каждого графика - PullRequest
0 голосов
/ 28 ноября 2018

Я пишу код для сохранения местоположения щелчка мыши на графиках, отображаемых в цикле for.После отображения графика блокнот matplotlib в jupyter отображает местоположения x и y, наведя курсор на график.Затем пользователь нажимает на график, чтобы выбрать интересующие x и y, которые должны быть сохранены.

Я написал следующий код для получения приведенного выше описания.

import numpy as np
from IPython import display
from IPython.display import clear_output
plt.close("all")
colour=['blue','red','green','black','magenta']
for num in range(len(df_save)):
    listed=[]
    for car,models in cars.items():
        import matplotlib.pyplot as plt
        %matplotlib notebook
        fig = plt.figure()
        ax = fig.add_subplot(111)
        i=0
        for model in models.items():
            ax.plot(df_car[car+model][(df_car[car+model+'_Vel']<=df_save['VEL_MAX'][num]) & (df_car[car+model+'_Vel']>=df_save['VEL_MIN'][num])],
                df_car['emission'][(df_car[car+model+'_Vel']<=df_save['VEL_MAX'][num]) & (df_car[car+model+'_Vel']>=df_save['VEL_MIN'][num])],color=colour[i])
            ax.set_ylim(-0.15,1.25)
            ax.set_title(car,fontsize=20,family='serif', color='black')
            i=i+1
        plt.show()
        ques=input('Do you want to store components for this? ')
        if ques=='Y':
            ques1=input('Enter the number of components: ')
            coords = []
            def onclick(event):
                global ix, iy
                ix, iy = event.xdata, event.ydata
                print ('x = %f, y = %f'%(ix, iy))
                global coords
                coords.append(ix, iy)
                if len(coords) == ques1:
                    fig.canvas.mpl_disconnect(cid)
                return coords
            cid=fig.canvas.mpl_connect('button_press_event', onclick)

            df_save['COMPONENTS'][num]=coords
        else:
            continue

Проблема

Когда программа запущена, графики не содержат никаких данных, как видел здесь .Я хотел бы знать, что здесь не так, и найти решение, которое поможет достичь цели.

1 Ответ

0 голосов
/ 03 декабря 2018

Перемещение plt.show () после mpl_connect и закрытие фигуры после достижения желаемого количества компонентов сделали свое дело.Я добавил несколько отладочных операторов, чтобы помочь следить за ходом кода.

       plt.close("all")
       colour = ['blue', 'red', 'green', 'black', 'magenta']
       for num in range(len(df_car)):

           print '\n--------------\n'
           print 'Current Entry: '+str(num)
           print '\n--------------\n'
           print df_car.loc[num]
           print '\n\n'

           coords = defaultdict(list)

           for car, models in car.items():
               fig = plt.figure()
               ax = fig.add_subplot(111)
               i = 0

               for model in models.items():
                   ax.plot(spec[car+model[0]+'_Vel'][(spec[car+model[0]+'_Vel'] <= df_car['VEL_MAX'][num]) & (spec[car+model[0]+'_Vel'] >= df_car['VEL_MIN'][num])],
                           spec['FLUX'][(spec[car+model[0]+'_Vel'] <= df_car['VEL_MAX'][num]) & (spec[car+model[0]+'_Vel'] >= df_car['VEL_MIN'][num])], color=colour[i])
                   ax.set_ylim(-0.15, 1.25)
                   ax.set_title(car+'_'+str(num), fontsize=20,
                                family='serif', color='black')
                   i = i+1

               print '\n--------------\n'
               print 'car: ' + car
               print '\n--------------\n'

               ques = raw_input('Do you want to store components for above car? ')

               if ques == 'y' or ques == 'Y':
                   ques1 = input('Enter the number of components: ')

                   def onclick(event):
                       global ix, iy
                       ix, iy = event.xdata, event.ydata
                       print ('x = %d, y = %d' % (ix, iy))
                       coords[car].append((ix, iy))
                       if len(coords[car]) == ques1:
                           fig.canvas.mpl_disconnect(cid)
                           plt.close(fig)
                       return coords

                   cid = fig.canvas.mpl_connect('button_press_event', onclick)
                   plt.draw()
                   plt.show()
               else:
                   continue

           df_car['COMPONENTS'][num] = coords
           print '\n--------------\n'
           print 'Updated Entry:::'
           print '\n--------------\n'
           print df_car.loc[num]
           print '\n'
           plt.close('all')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...