如何使用 python 字典中的 seaborn 绘制一个简单的图?

Jon*_*nis 1 python matplotlib seaborn

我有一本这样的字典:

my_dict = {'Southampton': '33.7%', 'Cherbourg': '55.36%', 'Queenstown': '38.96%'}
Run Code Online (Sandbox Code Playgroud)

我怎样才能有一个带有 3 个条形图的简单图,显示字典中每个键的值?

我试过了:

sns.barplot(x=my_dict.keys(), y = int(my_dict.values()))
Run Code Online (Sandbox Code Playgroud)

但我得到:

类型错误:int() 参数必须是字符串、类似字节的对象或数字,而不是“dict_values”

xcm*_*mkz 6

您的代码中有几个问题:

  1. 您正在尝试将每个值(例如“xx.xx%”)转换为一个数字。my_dict.values()将所有值作为dict_values对象返回。int(my_dict.values()))意味着将所有值的集合转换为单个整数,而不是将每个值转换为整数。前者自然是没有意义的。
  2. Python 无法将“12.34%”之类的内容解释为整数或浮点数。您需要删除百分比符号,即"float(12.34%"[:-1])
  3. 字典没有排序。因此,my_dict.keys()my_dict.values()不能保证以相同的顺序返回键值对中的键和值,例如,您得到的键可能是['Southampton', 'Cherbourg', 'Queenstown'],您得到的值可能是"55.36%", "33.7", "38.96%"这在 Python >= 3.7 和 CPython 3.6 中不再是问题;请参阅下面的@AmphotericLewisAcid 的评论。

解决所有这些问题后:

keys = list(my_dict.keys())
# get values in the same order as keys, and parse percentage values
vals = [float(my_dict[k][:-1]) for k in keys]
sns.barplot(x=keys, y=vals)
Run Code Online (Sandbox Code Playgroud)

你得到: 在此处输入图片说明

  • 关于第 3 点,字典现在从 Python 3.7 开始排序 - https://docs.python.org/3/whatsnew/3.7.html。`my_dict.keys()` 和 `my_dict.values()` 保证返回相同的顺序。这也是在 C-python 3.6 中非正式实现的(不确定 Iron Python 或 PyPy) (2认同)
  • 几个月前,@AmphotericLewisAcid 在我写下这个答案后了解到这一点 - 感谢您指出这一点! (2认同)