【问题标题】:Data alignment in plotting bar chart from dictionary in python从python中的字典绘制条形图的数据对齐
【发布时间】:2016-08-09 13:05:38
【问题描述】:

我正在尝试使用 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 和基因组_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']

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

谢谢,

【问题讨论】:

    标签: python dictionary matplotlib bar-chart


    【解决方案1】:

    您定义的是列表而不是字典,因为您使用的是方括号。如果您需要字典,则需要将数据包装在 {} 中。在 Python 中,会保留列表顺序,而不会保留字典顺序,除非您使用 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}
    

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

    【讨论】:

    • 谢谢!我会尝试使用 OrderedDict
    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多