split()数据的Python直方图

split()数据的Python直方图,python,matplotlib,split,histogram,Python,Matplotlib,Split,Histogram,我试图在包含浮点数的文本文件上生成Histgram: import matplotlib.pyplot as plt c1_file = open('densEst1.txt','r') c1_data = c1_file.read().split() c1_sum = float(c1_data.__len__()) plt.hist(c1_data) plt.show() c1\u数据的输出。\uu len\uuu()工作正常,但hist()抛出: C:\Python27\p

我试图在包含浮点数的文本文件上生成Histgram:

import matplotlib.pyplot as plt

c1_file = open('densEst1.txt','r')
c1_data =  c1_file.read().split()    
c1_sum = float(c1_data.__len__())

plt.hist(c1_data)
plt.show()
c1\u数据的输出。\uu len\uuu()
工作正常,但
hist()
抛出:

C:\Python27\python.exe "C:/x.py"
Traceback (most recent call last):
  File "C:/x.py", line 7, in <module>
    plt.hist(c1_data)
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 2958, in hist
    stacked=stacked, data=data, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\__init__.py", line 1812, in inner
    return func(ax, *args, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\axes\_axes.py", line 5995, in hist
    if len(xi) > 0:
TypeError: len() of unsized object
C:\Python27\python.exe“C:/x.py”
回溯(最近一次呼叫最后一次):
文件“C:/x.py”,第7行,在
plt.hist(c1_数据)
hist中第2958行的文件“C:\Python27\lib\site packages\matplotlib\pyplot.py”
堆叠=堆叠,数据=数据,**kwargs)
文件“C:\Python27\lib\site packages\matplotlib\\uuuu init\uuuu.py”,第1812行,在内部
返回函数(ax,*args,**kwargs)
hist中第5995行的文件“C:\Python27\lib\site packages\matplotlib\axes\\u axes.py”
如果len(xi)>0:
TypeError:未调整大小的对象的len()

指向使用numpy的示例。。。下面是简单的代码和结果

pandas也可以工作,在读取时可以使用split和data type(即使是列数据),也可以作为向量读取(取决于数据的大小)/


调用plt.hist
失败的主要原因是参数
c1\u data
是一个包含字符串的列表。当您
打开
文件并
读取
包含文件内容的文件时:

要读取文件内容,请调用
f.read(size)
,它读取一定数量的数据,并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回

我的

当您现在打开这个长字符串时,您将得到一个包含字符串的列表:

使用sep作为分隔符字符串,返回字符串中的单词列表

但是,字符串列表不是
plt.hist
的有效输入:

>>> import matplotlib.pyplot as plt
>>> plt.hist(['1', '2'])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
      1 import matplotlib.pyplot as plt
----> 2 plt.hist(['1', '2'])

C:\...\lib\site-packages\matplotlib\pyplot.py in hist(x, bins, range, normed, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, hold, data, **kwargs)
   3079                       histtype=histtype, align=align, orientation=orientation,
   3080                       rwidth=rwidth, log=log, color=color, label=label,
-> 3081                       stacked=stacked, data=data, **kwargs)
   3082     finally:
   3083         ax._hold = washold

C:\...\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs)
   1895                     warnings.warn(msg % (label_namer, func.__name__),
   1896                                   RuntimeWarning, stacklevel=2)
-> 1897             return func(ax, *args, **kwargs)
   1898         pre_doc = inner.__doc__
   1899         if pre_doc is None:

C:\...\lib\site-packages\matplotlib\axes\_axes.py in hist(***failed resolving arguments***)
   6178             xmax = -np.inf
   6179             for xi in x:
-> 6180                 if len(xi) > 0:
   6181                     xmin = min(xmin, xi.min())
   6182                     xmax = max(xmax, xi.max())

TypeError: len() of unsized object
解决方案: 您可以简单地将其转换为浮点数组:

>>> import numpy as np
>>> plt.hist(np.array(c1_data, dtype=float))

你的数据看起来怎么样?计算单个数字的直方图是没有意义的。请提供完整的问题描述,包括您试图实现的目标。请参阅和。@ImportanceOfBeingErnest为什么您会认为它是一个单一的数字?正如我所说,它是一个文本文件,包含由空格分隔的浮点数:)。没有足够仔细地阅读split()的文档,并认为它会抛出它们already@Yannik不客气。您还可以尝试使用:
c1\u data=np.loadtxt('densEst1.txt')
。它可能需要对参数进行一些修改,但当它工作时,它会自动读取文件,将其拆分并将其转换为数组。:)但是我不知道你的数据集是什么样子的(一行包含值,或者每行一个值,或者其他一些),这就是为什么我没有在答案中包含它的原因。
>>> import matplotlib.pyplot as plt
>>> plt.hist(['1', '2'])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
      1 import matplotlib.pyplot as plt
----> 2 plt.hist(['1', '2'])

C:\...\lib\site-packages\matplotlib\pyplot.py in hist(x, bins, range, normed, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, hold, data, **kwargs)
   3079                       histtype=histtype, align=align, orientation=orientation,
   3080                       rwidth=rwidth, log=log, color=color, label=label,
-> 3081                       stacked=stacked, data=data, **kwargs)
   3082     finally:
   3083         ax._hold = washold

C:\...\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs)
   1895                     warnings.warn(msg % (label_namer, func.__name__),
   1896                                   RuntimeWarning, stacklevel=2)
-> 1897             return func(ax, *args, **kwargs)
   1898         pre_doc = inner.__doc__
   1899         if pre_doc is None:

C:\...\lib\site-packages\matplotlib\axes\_axes.py in hist(***failed resolving arguments***)
   6178             xmax = -np.inf
   6179             for xi in x:
-> 6180                 if len(xi) > 0:
   6181                     xmin = min(xmin, xi.min())
   6182                     xmax = max(xmax, xi.max())

TypeError: len() of unsized object
>>> import numpy as np
>>> plt.hist(np.array(c1_data, dtype=float))