在Python中使用CSV文件作为输入绘制直方图

3

我有一个包含两列的csv文件,第一列是水果名称,第二列是数量。我需要使用这个csv作为输入数据来绘制直方图。如何实现这一点?我只需要展示前20个条目,其中水果名称将作为x轴,数量将作为y轴,并从整个100行的csv文件中获取数据。

import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv('data.csv', header = None ,quoting=2)

data.hist(bins=10)
plt.xlim([0,100])
plt.ylim([50,500])
plt.title("Data")
plt.xlabel("fruits")
plt.ylabel("Frequency")
plt.show()

我修改了上述程序以绘制一个条形图 -

import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv('data.csv', sep=',',header=None)
data.values
print data
plt.bar(data[:,0], data[:,1], color='g')
plt.ylabel('Frequency')
plt.xlabel('Words')
plt.title('Title')

plt.show()

但是这会给我一个“Unhashable Type”错误。有人可以帮忙吗?

你能提供一下你的CSV文件的例子吗? - AvidLearner
3
您希望绘制条形图而不是直方图。在直方图上无法将分类数据放置为 x 轴。 - Sarit Adhikari
你实际上从未将数据传递给图表。请参见以下示例:https://bespokeblog.wordpress.com/2011/07/11/basic-data-plotting-with-matplotlib-part-3-histograms/ 和 https://people.duke.edu/~ccc14/pcfb/numpympl/MatplotlibBarPlots.html - abalter
Sarit提出了一个很好的观点。你是在查看不同类型水果的计数吗?那是一张条形图。直方图是将计数绘制在可枚举值集合上的图表,例如样本人群每天吃的水果数量 - 这么多人吃1个水果,这么多人吃2个水果,这么多人吃3个水果等等。 - abalter
是的,一个条形图实际上。 - Nick
苹果 420 香蕉 262 葡萄 255 软枣 248 橙子 236 甜瓜 232 酸橙 213 柠檬 205 木瓜 180 芒果 178 知道 177 罗勒 158 好的 133 事物 130 猕猴桃 127 龙 124 奶油果 120 .... CSV 将会是这样 - Nick
1个回答

6

您可以使用pandas的内置绘图功能,但需要指定第一列为索引。

import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv('data.csv', sep=',',header=None, index_col =0)

data.plot(kind='bar')
plt.ylabel('Frequency')
plt.xlabel('Words')
plt.title('Title')

plt.show()

如果您需要使用 matplotlib,可以使用 data.to_dict() 将数组转换为字典,并提取数据到 numpy 数组或其他类似的数据结构中,这样可能会更加容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接