关于python:pyplot.scatter(dataframe)与dataframe.plot(kind =’scatter’)

pyplot.scatter(dataframe) vs. dataframe.plot(kind='scatter')

我有几个熊猫数据框。我想在单独的散点图中绘制几列,彼此相对,然后将它们组合为图中的子图。我想相应地标记每个子图。在使子图标签正常工作方面,我遇到了很多麻烦,直到我发现据我所知,有两种直接从数据框进行图绘制的方法;参见SO和pandasdoc:

1
2
ax0 = plt.scatter(df.column0, df.column5)
type(ax0): matplotlib.collections.PathCollection

1
2
ax1 = df.plot(0,5,kind='scatter')
type(ax1): matplotlib.axes._subplots.AxesSubplot

ax.set_title('title')适用于ax1,但不适用于ax0,这将返回
AttributeError: 'PathCollection' object has no attribute 'set_title'

我不明白为什么存在两种不同的方式。使用PathCollections的第一种方法的目的是什么?在17.0中添加了第二个。是第一个过时的还是有其他用途的?


如您所见,pandas函数返回一个axes对象。也可以使用"获取当前轴"功能将PathCollection对象解释为轴对象。例如:

1
2
3
plot = plt.scatter(df.column0, df.column5)
ax0 = plt.gca()
type(ax0)

< matplotlib.axes._subplots.AxesSubplot at 0x10d2cde10>

您可能会看到以下更标准的方式:

1
2
3
fig = plt.figure()
ax0 = plt.add_subplot()
ax0.scatter(df.column0, df.column5)

这时,欢迎您执行"设置"命令,例如您的set_title

希望这会有所帮助。


两者之间的区别在于它们来自不同的库。第一个来自matplotlib,第二个来自pandas。它们执行相同的操作,即创建一个matplotlib散点图,但是matplotlib版本返回点的集合,而pandas版本返回matplotlib子图。这使matplotlib版本更具通用性,因为您可以在另一个图中使用点的集合。