我有包含Unicode字符串及其频率的文本文件。
അംഗങ്ങള്ക്ക് 10813
കുടുംബശ്രീ 10805
പരിരക്ഷാപദ്ധതിക്ക് 10778
ചെയ്തു 10718
ഇന്ന് 10716
അന്തര് 659
രാജിന്റെ 586
当我尝试使用matplotlib
我收到此错误
Traceback (most recent call last):
File "plot.py", line 3, in <module>
xs, ys = np.loadtxt('oun.txt', delimiter='\t').T
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 841, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: could not convert string to float: '
这是我的代码
import numpy as np
import matplotlib.pyplot as plt
xs, ys = np.loadtxt('oun.txt', delimiter='\t').T
plt.bar(xs, ys)
plt.show()
这段代码有什么问题?
答案 0 :(得分:3)
为了使用loadtxt
从文件中读取字符串,您必须指定dtype
参数(请参阅此处的docs)。
import matplotlib.pyplot as plt
import numpy as np
data = np.loadtxt('derp', dtype={'names': ('strings', 'freq'),
'formats': ('S32', 'i4')})
xs, ys = zip(*data)
temp = range(len(ys)) # Temp variable for use as x-axis.
plt.bar(temp, ys, align='center')
plt.xticks(temp, xs) # Re-define ticks as your strings.
plt.show()
在这种情况下,该文件有2列,我给它们names
('strings', 'freq')
而formats
是('S32', 'i4')
,其中S
表示字符串i
表示整数。可以找到dtype
的文档here。请注意,dtype
格式中的数字会提供有关列中值的大小的信息(i4
对应于32位有符号整数)。