首页 > 解决方案 > Matplotlib 与字符串的频率

问题描述

好的,所以我正在尝试创建一个比我在 R 中的“更漂亮”的图表。我想知道是否有任何简单的方法可以在一列中使用频率并在另一列中使用字符串。除了 xticks 之外,我发现的所有文档似乎都没有涉及这个主题。在 R 中,这相当简单,所以我觉得我在这里遗漏了一些东西。

在 RI 中可以简单地做到这一点:

> data<-read.table ("/home/myname/Desktop/hist.txt", sep="|")
> names (data)[2] = "Words"
> names (data)[1] = "Frequency"
> barplot(data$Frequency)

我的数据结构如下:

3059195|and
2066278|ant
1851521|it
1741203|was

我可以为单词分配数字,然后将其设置为刻度线,但我试图避免不必要的变通方法。

有人会有一个很好的最小例子吗?

像这样的东西:

import matplotlib.pyplot as plt
import csv

x = []
y = []

with open('/home/shulby/Desktop/hist.txt','r') as csvfile:
    plots = csv.reader(csvfile, delimiter='|')
    for row in plots:
        x.append(int(row[0]))

plt.plot(x,y)
plt.xlabel('Words')
plt.ylabel('Frequency')
plt.title('Balanced Histogram')
plt.legend()
plt.show()

我只是不确定如何在这里对待“y”。

标签: pythonrmatplotlibbar-chart

解决方案


尝试这个:

import matplotlib.pyplot as plt
import csv

x = []
y = []

with open('/home/shulby/Desktop/hist.txt','r') as csvfile:
    plots = csv.reader(csvfile, delimiter='|')
    for row in plots:
        y.append(int(row[0]))

N = len(y)
x = range(N)
plt.plot(x,y)
plt.xlabel('Words')
plt.ylabel('Frequency')
plt.title('Balanced Histogram')
plt.legend()
plt.show()

推荐阅读