简体   繁体   English

使用matplotlib绘制条形图 - 类型错误

[英]plot a bar chart using matplotlib - type error

I am trying to plot a frequency distribution (of occurences of words and their frequency) 我试图绘制一个频率分布(出现的词及其频率)

This is my code: 这是我的代码:

import matplotlib.pyplot as plt

y = [1,2,3,4,5]
x = ['apple', 'orange', 'pear', 'mango', 'peach']

plt.bar(x,y)
plt.show

However, i am getting this error: 但是,我收到此错误:

TypeError: cannot concatenate 'str' and 'float' objects
import matplotlib.pyplot as plt
import numpy as np
y = [1,2,3,4,5]
x = np.arange(0,len(y)) + 0.75
xl = ['', 'apple', 'orange', 'pear', 'mango', 'peach']

fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(x,y,0.5)
ax.set_xticklabels(xl)
ax.set_xlim(0,5.5)

It would be interesting if there is a better method for setting the labels to be in the middle of the bars. 如果有一种更好的方法可以将标签设置在条形图的中间,那将会很有趣。

According to this SO post , there is a better solution: 根据这篇SO帖子 ,有一个更好的解决方案:

import matplotlib.pyplot as plt
import numpy as np
y = [1,2,3,4,5]
# adding 0.75 did the trick but only if I add a blank position to `xl`
x = np.arange(len(y))
xl = ['apple', 'orange', 'pear', 'mango', 'peach']

fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(x,y,0.5, align='center')
ax.set_xticks(x)
ax.set_xticklabels(xl)

Just add two lines: 只需添加两行:

import matplotlib.pyplot as plt
y = [1, 2, 3, 4, 5]
x_name = ['apple', 'orange', 'pear', 'mango', 'peach']
x = np.arange(len(x_name))  # <--
plt.bar(x, y)
plt.xticks(x, x_name)  # <--
plt.show()

在此输入图像描述

Plot plt.bar(x_name, y) directly will be supported in v2.1 , see here https://github.com/matplotlib/matplotlib/issues/8959 v2.1中将直接支持绘图plt.bar(x_name, y) ,请参见https://github.com/matplotlib/matplotlib/issues/8959

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM