Построение значений из словаря, в котором есть словарь - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть словарь под названием 'colors', в котором содержатся различные цвета. Эти цвета в моем словаре 'colors' определены как словарь, потому что мне нужно было построить график в основном "красный" против "синий" для разных кластеров цветов. Я построил графики «красный» и «синий» для каждого кластера, но теперь я хочу построить график для всех кластеров на одном графике.

Я продолжаю получать сообщение об ошибке, что я не могу построить словарь. Я понимаю это, но я не знаю, как выбрать значения, которые мне нужны. В этом случае мои цвета - «VMINJ» и «UMINV» на осях x и y соответственно, а мои кластеры названы как «SpARCS-0000» или «SPTCL-0000».

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)):    #cycling through all the files depending on cluster
    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)  #seems to be working thus far.





    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]])

        #Could I use a numpy.where(goodindx=goodcolindx), I could also use an IF statement for that. 

        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]]))


        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]])


plt.plot(colors['VMINJ'], colors['UMINV'] , 'ko')
plt.xlim(0.0, 2.0)
plt.ylim(0.0, 2.5)
plt.plot([0, 0.8], [1.3, 1.3], 'k-', lw = 2)
plt.plot([1.6, 1.6], [2.0, 2.5], 'k-', lw = 2)
plt.plot([0.8, 1.6], [1.3, 2.0], 'k-', lw = 2)
plt.title('Restframe color')
plt.xlabel('V-J')
plt.ylabel('U-V')
plt.show()    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...