用Python从CSV读取数据并使用matplotlib绘制条形图

1 投票
3 回答
7359 浏览
提问于 2025-04-16 14:43

我正在尝试读取一个名为 '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)

这两种方法都可以用!

谢谢!

撰写回答