Использование для l oop для построения массивов из словарей - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть словарь с несколькими ключами, определенными как (произвольные входные данные):

colors = {}
colors['red'] = {}
colors['blue'] = {}
colors['red'][clustname] = np.array([])
colors['blue'][clustname] = np.array([])

В основном я хочу построить график красный-синий для каждого «кластера». Всего у меня 13 «кластеров» с разными значениями цвета для каждого. Имена в моем коде отличаются от произвольных, приведенных выше, но я подумал, что было бы проще разобраться с базовыми c значениями, чем смотреть на общий код:

colpath = '/home/jacob/PHOTOMETRY/RESTFRAME_COLOURS/'    #This is the path to the restframe colors


goodcolindx = {}
colfiledat = {}
colors = {}
colors['UMINV'] = {}
colors['VMINJ'] = {}
colors['NUVMINV'] = {}
colors['id'] = {}

for iclust in range(len(clustname)):    
    colors['UMINV'][clustname[iclust]] = np.array([])
    colors['VMINJ'][clustname[iclust]] = np.array([])
    colors['id'][clustname[iclust]] = np.array([])
    colors['NUVMINV'][clustname[iclust]] = np.array([])
    filepath = catpath + clustname[iclust] + "_totalall_" + extname[iclust] + ".cat"
    photdat[clustname[iclust]] = ascii.read(filepath) 

    filepath = zpath + "compilation_" + clustname[iclust] + ".dat"
    zdat[clustname[iclust]] = ascii.read(filepath)

    colfilepath = colpath + 'RESTFRAME_MASTER_' + clustname[iclust] + '_indivredshifts.cat'
    colfiledat[clustname[iclust]] = ascii.read(colfilepath)  


    goodcolindx[clustname[iclust]] = np.where((colfiledat[clustname[iclust]]['REDSHIFTUSED'] > 0.9) & \
                                              (colfiledat[clustname[iclust]]['REDSHIFTUSED'] < 1.5) & \
                                              (photdat[clustname[iclust]]['totmask'] == 0) & \
                                           (photdat[clustname[iclust]]['K_flag'] == 0) & \
                    ((zdat[clustname[iclust]]['quality'] == 3) | (zdat[clustname[iclust]]['quality'] == 4)))
    goodcolindx[clustname[iclust]] = goodcolindx[clustname[iclust]][0]

    for igood in range(len(goodcolindx[clustname[iclust]])):

        idstring = str(photdat[clustname[iclust]]['id'][goodcolindx[clustname[iclust]][igood]])

        colors['NUVMINV'][clustname[iclust]] = np.append(colors['NUVMINV'][clustname[iclust]], -2.5 * 
                                                         np.log10(colfiledat[clustname[iclust]]['NUV'][goodcolindx[clustname[iclust]][igood]]
                                                                  / colfiledat[clustname[iclust]]['V'][goodcolindx[clustname[iclust]][igood]]))'SpARCS-0035'


        colors['UMINV'][clustname[iclust]] = np.append(colors['UMINV'][clustname[iclust]], colfiledat[clustname[iclust]]['UMINV'][goodcolindx[clustname[iclust]][igood]])
        colors['id'][clustname[iclust]] = np.append(colors['id'][clustname[iclust]], photdat[clustname[iclust]]['id'][goodcolindx[clustname[iclust]][igood]])
        colors['VMINJ'][clustname[iclust]] = np.append(colors['VMINJ'][clustname[iclust]], colfiledat[clustname[iclust]]['VMINJ'][goodcolindx[clustname[iclust]][igood]])

for iclustc in colors:
    plt.plot(colors['VMINJ'][clustname[iclustc]], colors['UMINV'][clustname[iclustc]], 'ko')
    plt.show()

Так что в этом случае мой «красный» - это VMINJ, а мой «синий» - это UMINV. Я пытаюсь использовать для l oop для циклического перебора всех имен кластеров, которые у меня есть, но я продолжаю возвращать ошибку «Строковые индексы должны быть целыми числами». Я понимаю основы этого, но не знаю, как исправить мой код, чтобы сделать графики для каждого «красный», «синий» для каждого кластера. Любая помощь будет отличной, дайте мне знать, если у вас есть вопросы

1 Ответ

0 голосов
/ 24 апреля 2020

Я понял это. Я изменил для l oop на:

for iclust in range(len(clustname)):
plt.plot(colors['UMINV'][clustname[iclust]]....

, и это сработало

...