用Python从CSV读取数据并使用matplotlib绘制条形图
我正在尝试读取一个名为 'StabilityResults.csv' 的以分隔符分开的 CSV 文件,并用第 7 列的数据创建一个柱状图,x 轴的标签来自第 0 列。获取第 0 列的标签没问题,但把第 7 列的值读入一个列表后,似乎在 matplotlib 中无法作为有效输入使用。有没有办法把我的值列表转换成 matplotlib 能识别的格式呢?
import matplotlib.pyplot as plt
import csv
import numpy as np
res = csv.reader(open('StabilityResults.csv'), delimiter=',')
res.next() # do not read header
mut = []
tot = []
a = 0
width = 0.2
for col in res:
mut.append(col[0])
tot.append(col[7])
a += 1
ind = arange(a)
p1 = plt.bar(ind,tot,width,color='r')
labs = plt.xticks(ind+width,mut)
plt.show()
我也尝试使用 numpy 的 genfromtxt 函数读取第 7 列,但这给出的数组在 matplotlib 中也无法使用。
tot2 = np.genfromtxt('StabilityResults.csv', delimiter=',', dtype=None, names=True, deletechars=',', usecols=[7])
3 个回答
0
mut.append(col[0])
tot.append(col[7])
mut.append(float(col[0]))
tot.append(float(col[7]))
你把 col
列表里的内容添加进来,这些内容是文本。你需要把它转换成 int
(整数)或者 float
(浮点数,带小数的数字):
1
你应该把数据转换成整数类型(或者浮点数类型)
tot.append(int(col[7]))
1
唉,真该花更多时间去做。跟Manuel的回答差不多,我在for循环里加了一个临时的占位符,用来转换成浮点数:
for col in res:
tmp_tot = float(col[7])
tot.append(tmp_tot)
这两种方法都可以用!
谢谢!