带有 IDLE 的 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')
但是,这个 returns 一个很长的错误,我很难理解:
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 完成。作为一个新手,这听起来很不可思议。
这是正确的吗?我真的不能使用 IDLE 制作散点图吗?如果可以,我需要做什么?
这是调试问题的指南:
首先,简化您的程序,使其不依赖于外部数据,这样错误就可以重现。参见 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) 查看其他示例 and/or (2) the documentation。从文档中您会发现参数 x
和 y
应该是 "label or position",而不是数据框列本身。
所以改变
plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter')
到
plot_me = data.plot(x='x', y='y', kind='scatter')
其中 x
和 y
是 DataFrame 中的列标签,将为您提供所需的图。
最后这与 IDLE 无关,但其中一个命令中使用了错误的语法。
关于问题的 IDLE 部分:如果您使用 python -m idlelib
(或 py -3.4 -m idlelib
)从命令行控制台(Windows 上的命令提示符或 PowerShell)启动 IDLE,则sys.__stdout__
将是控制台并且 .fileno()
调用将成功并且 return 1 和 os.get_terminal_size(1)
调用将 return 控制台的大小 window .然后 Pyplot 应该打印到控制台或 IDLE shell(我不知道是哪个)。
我正在尝试在 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')
但是,这个 returns 一个很长的错误,我很难理解:
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 完成。作为一个新手,这听起来很不可思议。
这是正确的吗?我真的不能使用 IDLE 制作散点图吗?如果可以,我需要做什么?
这是调试问题的指南:
首先,简化您的程序,使其不依赖于外部数据,这样错误就可以重现。参见 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) 查看其他示例 and/or (2) the documentation。从文档中您会发现参数 x
和 y
应该是 "label or position",而不是数据框列本身。
所以改变
plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter')
到
plot_me = data.plot(x='x', y='y', kind='scatter')
其中 x
和 y
是 DataFrame 中的列标签,将为您提供所需的图。
最后这与 IDLE 无关,但其中一个命令中使用了错误的语法。
关于问题的 IDLE 部分:如果您使用 python -m idlelib
(或 py -3.4 -m idlelib
)从命令行控制台(Windows 上的命令提示符或 PowerShell)启动 IDLE,则sys.__stdout__
将是控制台并且 .fileno()
调用将成功并且 return 1 和 os.get_terminal_size(1)
调用将 return 控制台的大小 window .然后 Pyplot 应该打印到控制台或 IDLE shell(我不知道是哪个)。