简单的条形图在python中

时间:2016-04-21 02:35:15

标签: python matplotlib plot graph bar-chart

我正在尝试为bar plot列表绘制一个简单的keyword vs frequency。 由于数据没有header,我无法使用PandasSeabron.

输入

#kyuhyun,1
#therinewyear,4
#lingaa,2
#starts,1
#inox,1
#arrsmultiplex,1
#bollywood,1
#kenya,1
#time,1
#watch,1
#malaysia,3

代码:

from matplotlib import pyplot as plt
from matplotlib import*
import numpy as np 

x,y = np.genfromtxt('theri_split_keyword.csv', delimiter = ',', unpack=True, comments=None, usecols=(0,1))

plt.bar(x,y)

plt.title('Info')
plt.ylabel('Y axis')
plt.xlabel('X axis')

plt.show()

我想要绘制的是一个条形图,其中x axis为关键字,y axis为频率。任何简单的方法来绘制这将是巨大的帮助。

我得到的输出在下面,这绝对不是我想要的。 enter image description here

下面的解决方案看起来像魅力,但我在列表中有太多的关键字,我正在寻找一个选择,如果我只能绘制前10-20个关键字与相应的关键字,以便条形图看起来更好。

答案中给出的解决方案的输出。

enter image description here

3 个答案:

答案 0 :(得分:1)

    import numpy as np
    import matplotlib.pyplot as plt
    import csv

    x = []
    y = []
    with open('theri_split_keyword.csv', "rb") as csvfile:
        reader = csv.reader(csvfile, delimiter=',')
        for row in reader:
            x.append(row[0].lstrip('#'))
            y.append(int(row[1]))

    ind = np.arange(len(x))  # the x locations for the groups
    width = 0.35       # the width of the bars

    fig, ax = plt.subplots()
    plt.bar(ind,y)

    ax.set_ylabel('Y axis')
    ax.set_title('X axis')
    ax.set_xticks(ind + width)
    ax.set_xticklabels(x, rotation='vertical')


    plt.show()

答案 1 :(得分:0)

我不熟悉np.genfromtxt,但我怀疑问题是当x应为数字时,它会将x作为字符串数组返回。

也许尝试类似的事情:

tick_marks = np.arange(len(x))
plt.bar(tick_marks, y)
plt.xticks(tick_marks, x, rotation=45)

答案 2 :(得分:0)

没有回答你的问题,但是pandas并不要求数据有标题。 如果您从文件中读取数据,只需选择header = None(更多信息here)。

df = pd.read_csv(myPath, header=None)
df.columns = ('word','freq') # my cystom header
df.set_index('word') # not neccesary but will provide words as ticks on the plot
df.plot(kind='bar')

您也可以将数据作为字典传递,例如

df = pd.DataFrame({'word':['w1','w2','w3'],'freq':[1,2,3})
df.plot.bar()