如何在给定的字典序列中绘制水平条形图?

2024-05-16 21:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在python2.7中,我有下面这句话:

packetsNeeded = {
'Hydrogen': 142,
'Helium': 122,
'Lithium': 135,
'Boron': 145,
'Beryllium': 135,
'Nitrogen': 171,
'Neon': 141,
'Oxygen': 134,
'Carbon': 239,
'Florine': 134
}

我写了一个脚本,在这个脚本中,我绘制了所需数据包与dict键的水平条形图

代码简单如下:

^{pr2}$

输出非常棒:

My Horizonatal Bar Graph

问题

我如何绘制yticks作为packetsNeededdict中的键序列?如您所见,第一个图形条目是Beryllium: 135,而不是packetsNeededdict中的Hydrogen: 142

另外,排序是如何在图表中发生的?我没有在代码中提到任何排序?在


Tags: 代码脚本排序绘制neoncarbonheliumlithium
1条回答
网友
1楼 · 发布于 2024-05-16 21:43:20

感谢@Tim建议从

that the answer may be that dictionaries are not ordered in memory

收集到的数据现在表示为元组列表:

from pylab import *

## List of Tuples much better than dicts since dicts are not arranged
## in memory
packetsNeeded = [
    ('Hydrogen', 142),
    ('Helium', 122),
    ('Lithium', 135),
    ('Boron', 145),
    ('Beryllium', 135),
    ('Nitrogen', 171),
    ('Neon', 141),
    ('Oxygen', 134),
    ('Carbon', 239),
    ('Florine', 134)
]

创建了一些列表理解来分隔值和名称:

^{pr2}$

其余的代码用于绘制水平条形图

pos = arange(10)+.5

barh(pos, values, align = 'center', color = 'green')
yticks(pos,(names))

for i, v in enumerate(values):
    text(v + 3, i + .25, str(v), fontweight = 'bold', fontsize = '15')
xlim(0, 300)

title('Number of Packets Needed by Each TWIN node in Multihop')
xlabel('Number of Droplets Needed')
ylabel('Name of TWIN nodes')
grid(True)

show()

输出

Arranged data now on graph

相关问题 更多 >