2016-08-09 3 views
0

Я пытаюсь построить 2 оси в гистограмме, используя 2 разных словаря, которые имеют точно такие же ключи, используя matplotlib. Я не смог убедиться, что элементы (ключи и значения) двух словарей находятся в одном порядке. ПримерВыравнивание данных при построении диаграммы графика из словаря в python

код:

ind = numpy.arange(len(types_dict)) # the x locations for the groups 
fig, ax = plt.subplots() 
rects1 = ax.bar(ind, types_dict.values(), 0.35, color='green') 
rects2 = ax.bar(ind+0.35, genome_types_dict.values(), 0.35, color='purple') 
plt.xticks(ind+width, types_dict.keys(), fontsize=10) 
plt.savefig(output+"bar_" + library_name + ".png") 

При печати ключи для словарей types_dict и genome_types_dict, их ключи не в порядке, а следовательно, и их значения:

types_dict = ['rRNA', 'IGR', '3UTR', 'sRNA', 'tRNA', 'TU', '5UTR', 'AS', 'cis_AS_with_trans_t', 'mRNA', 'other-ncRNA'] 
genome_types_dict = ['rRNA', 'IGR', '3UTR', '5UTR', 'tRNA', 'TU', 'sRNA', 'AS', 'cis_AS_with_trans_t', 'mRNA', 'other-ncRNA'] 

Ищете решение для выравнивание между двумя словарями.

Спасибо,

ответ

0

Вы определение списков, а не словари, потому что вы используете квадратные скобки. Если вам нужны словари, вам нужно будет обернуть ваши данные в {}. В Python порядок списков сохранен, порядок dict - нет, если вы не используете OrderedDict.

Кроме того, элементы в двух списках, которые вы определили, являются строками (они определены в кавычках), которые вы пытаетесь построить по оси y против ваших значений оси x (ind). Вам понадобятся числовые данные для заговора против ind.

Предположительно вы хотите, чтобы определить истинный словарю ключ-значение пары с данными численных значений, например:

genome_dict = {'rRNA': 1, 'IGR': 2, '3UTR': 3, '5UTR': 4, 'tRNA': 6, 'TU': 7, 'sRNA': 8, 'AS': 9, 'cis_AS_with_trans_t': 10, 'mRNA': 11, 'other-ncRNA': 12} 

С помощью этого, вы можете извлечь ключи и использовать их в качестве графа оси этикетки с топором .set_xticklabels. Вы можете использовать значения словаря в качестве второго аргумента в выражении rects = ax.bar(), то есть в качестве значений оси y, и, таким образом, создать график числовых данных против ind, причем каждый стержень помечен как тип генома.

+0

Спасибо! Я попробую использовать OrderedDict –