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:
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.