代码之家  ›  专栏  ›  技术社区  ›  indigochild

空闲PyPlot

  •  0
  • indigochild  · 技术社区  · 8 年前

    我试图使用matplotlib绘制一些数据。pyplot处于空闲状态。这是我第一次尝试在教室外使用matplotlib。

    我的代码非常简单:将CSV中的一些数据加载到数据帧中,并尝试将其放在散点图上。

    import matplotlib.pyplot as plt
    import pandas as pd
    
    filename = 'data.csv'
    data = pd.read_csv(filename, delimiter=',')
    
    plot_me = data.plot(x=data['Density'], y=data['Cost per Pupil'], kind='scatter')
    

    但是,这返回了一个长错误,我在以下方面遇到了问题:

    Traceback (most recent call last):
      File "C:/Users/dmccarville/Desktop/DJM Figures/plot.py", line 10, in <module>
        plot_me = data.plot(x=data['Density'], y=data['Cost per Pupil'], kind='scatter')
      File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 2617, in __call__
        sort_columns=sort_columns, **kwds)
      File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 1859, in plot_frame
        **kwds)
      File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 1684, in _plot
        plot_obj.generate()
      File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 240, in generate
        self._make_plot()
      File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 833, in _make_plot
        scatter = ax.scatter(data[x].values, data[y].values, c=c_values,
      File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 1958, in __getitem__
        return self._getitem_array(key)
      File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 2002, in _getitem_array
        indexer = self.loc._convert_to_indexer(key, axis=1)
      File "C:\Python34\lib\site-packages\pandas\core\indexing.py", line 1168, in _convert_to_indexer
        return labels.get_loc(obj)
      File "C:\Python34\lib\site-packages\pandas\core\indexes\base.py", line 2442, in get_loc
        return self._engine.get_loc(key)
      File "pandas\_libs\index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc (pandas\_libs\index.c:5280)
      File "pandas\_libs\index.pyx", line 134, in pandas._libs.index.IndexEngine.get_loc (pandas\_libs\index.c:4819)
      File "C:\Python34\lib\site-packages\pandas\core\base.py", line 51, in __str__
        return self.__unicode__()
      File "C:\Python34\lib\site-packages\pandas\core\series.py", line 982, in __unicode__
        width, height = get_terminal_size()
      File "C:\Python34\lib\site-packages\pandas\io\formats\terminal.py", line 33, in get_terminal_size
        return shutil.get_terminal_size()
      File "C:\Python34\lib\shutil.py", line 1071, in get_terminal_size
        size = os.get_terminal_size(sys.__stdout__.fileno())
    AttributeError: 'NoneType' object has no attribute 'fileno'
    

    我找到了 this bug report ,这表明这不能用空闲来完成。作为一个新手,这听起来让我难以置信。

    这是正确的吗?我真的可以不使用IDLE绘制散点图吗?如果可以,我需要做什么?

    2 回复  |  直到 8 年前
        1
  •  3
  •   ImportanceOfBeingErnest    8 年前

    这是调试问题的指南:

    首先,简化程序,使其不依赖于外部数据,从而使错误可再现。看见 Minimal, Complete, and Verifiable example . 这可能如下所示:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    data = pd.DataFrame({"x" : [1,2,3],"y":[3,2,4]})
    
    plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter')
    
    plt.show()
    

    Traceback (most recent call last):
      File "D:\Data\Computer\Entwicklung\python\SO_plot_dataframe.py", line 13, in <module>
        plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter')
    
    # and so on. 
    

    这表明情节的创建有问题,而不是实际的显示。

    为了了解可能出现的问题,(1)查看其他示例和/或(2) the documentation . 从文档中,您会发现参数 x y

    所以在改变

    plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter')
    

    plot_me = data.plot(x='x', y='y', kind='scatter')
    

    哪里 x y 是数据框中的列标签,将为您提供所需的绘图。

    最后,这与IDLE无关,但与其中一个命令中使用的语法错误有关。

        2
  •  0
  •   Terry Jan Reedy    8 年前

    关于问题的空闲部分:如果从命令行控制台(Windows上的命令提示符或PowerShell)以 python -m idlelib (或 py -3.4 -m idlelib ),然后 sys.__stdout__ .fileno() 调用将成功并返回1和 os.get_terminal_size(1) 调用将返回控制台窗口的大小。Pyplot然后应该打印到控制台或空闲shell(我不知道是哪个)。