簡體   English   中英

PyPlot與空閑

[英]PyPlot with IDLE

我正在嘗試使用IDLE中的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'

我能夠找到此錯誤報告 ,這表明IDLE無法完成。 作為一個新手,這對我來說真是不可思議。

這個對嗎? 我真的可以不使用IDLE繪制散點圖嗎? 如果可以,我該怎么辦?

這是調試問題的指南:

首先,簡化程序,使其不依賴於外部數據,從而使錯誤可重現。 請參閱最小,完整和可驗證的示例 看起來可能如下所示:

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) 文檔 從文檔中,您會發現參數xy應該是“標簽或位置”,而不是數據框列本身。

所以改變

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

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

其中xy是DataFrame中的列標簽,將為您提供所需的繪圖。

最后,這與IDLE無關,但是其中一個命令中使用了錯誤的語法。

關於問題的IDLE部分:如果您使用python -m idlelib (或py -3.4 -m idlelib )從命令行控制台(Windows上的命令提示符或PowerShell)啟動IDLE,則sys.__stdout__將成為控制台,並且.fileno()調用將成功並返回1,而os.get_terminal_size(1)調用將返回控制台窗口的大小。 然后,Pyplot應該打印到控制台或IDLE shell(我不知道是哪一個)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM