在Python中绘制一组键和值

时间:2016-05-08 17:14:37

标签: python numpy matplotlib

我正在尝试从文件中读取数据,然后从文件中构建字典。使用这个字典,我想绘制一个图表,其中字典的键作为X图,字典的值作为标记值。但是,键值是字符串,我只需要标记它们。我尝试了以下代码,它抛出一个错误,指出键值是一个字符串。

The data from the data.txt file reads as follows:
new:10,not new:30,10:40,a:5.0

from matplotlib import pyplot as plt
import numpy as np

fileopen=open("data.txt", "r")
for a in fileopen.readlines():
b= a.split(",")
fileopen.close()
newdict={}
for c in b:
 newdict.update({c.rstrip("\',\",").split(":")[0]:eval(c.rstrip("\',\",").split(":")[1])})


plt.figure(figsize=(8,6), dpi=80)
x=[i for i in newdict]
plt.xticks(np.linspace(0,4,1, endpoint=True))
y=[newdict[j] for j in newdict]
plt.plot(y, color="blue", linewidth=1.0, linestyle="-")
plt.show()

这是我在控制台上出现的错误。

File "C:\Users\Annakoppad\Anaconda2\lib\site-packages\numpy\core\numeric.py", line 474, in asarray
return array(a, dtype, copy=False, order=order)

ValueError: could not convert string to float: a

我无法继续前进,有人可以在这方面提供帮助吗?

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

如果这是真正的csv数据,请尝试使用csvcsv.DictReader也许可以帮到你。理想情况下,键名不是通过数据混合的,而是根据第一行的位置定义,行如:

new,not new,10,a
10,30,40,5.0

如果您根本不想将密钥放在csv中,您可以定义一系列密钥名称:

keys=("new","not new",10,"a")

请记住,在使用csv(以及readlines)时,每个值都被读取为字符串,因此如果行包含不同的数据类型,则必须将各个键转换为获取整数或浮点数。

参考:csv https://docs.python.org/3/library/csv.html?highlight=csv#csv.DictReader