从python中的字典绘制条形图中的数据对齐

时间:2016-08-09 13:05:39

标签: python dictionary matplotlib bar-chart

我正在尝试使用matplotlib使用2个不同的词典在条形图中绘制2个轴,这些词典具有完全相同的键。 我无法确保两个词典的项目(键和值)的顺序相同。

代码示例:

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

寻找2个字典之间对齐的解决方案。

谢谢,

1 个答案:

答案 0 :(得分:0)

您正在使用方括号来定义列表而不是字典。如果您想要字典,则需要将数据包装在{}中。在Python中,除非您使用OrderedDict

,否则将保留列表顺序,而不是dict顺序

此外,您定义的两个列表中的元素是字符串(它们在引号中定义),您试图在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}

使用它,您可以提取密钥并将其用作ax.set_xticklabels的图形轴标签。您可以使用字典的值作为rects = ax.bar()表达式中的第二个参数,即作为y轴值,从而生成针对ind的数值数据图,每个条都标记为基因组类型。 / p>