使用matplotlib的额外空图

时间:2018-07-24 10:58:30

标签: python pandas matplotlib

使用此代码绘制虹膜数据集会给我一个额外的空图:

import pandas as pd
from matplotlib import pyplot as plt

d = {'Species': ['setosa', 'versicolor','virginica'], 'Sepal length': [1, 2, 3], 'Sepal width': [2, 4, 6]}

df = pd.DataFrame(data=d)


unv = df['Species'].unique()
colorv = ['r','b','g']
markerv = ['v', 'o', '>']


#Getting an extra empty plot for no reason
fig, ax=plt.subplots(1,2)
for i in range(len(unv)):
    df[df['Species'] == unv[i]].plot(x="Sepal length", y="Sepal width", kind="scatter",ax=ax[0],label=unv[i],color=colorv[i], marker = markerv[i])

plt.show()

任何建议为何我会收到此额外的地块以及如何将其删除? enter image description here

1 个答案:

答案 0 :(得分:1)

您将获得2个子图,因为要通过调用plt.subplots(1,2)请求两个子图,这将在1行和2列上创建1 * 2个子图。

因此,您的问题的答案是致电plt.subplots(1,1)。 在评论中,您说您已尝试过,但遇到错误。这是预期的。 The documentation states(重点是我):

  

返回:

     

fig:matplotlib.figure.Figure对象

     

ax:轴对象或数组   轴对象。

     

ax可以是单个matplotlib.axes.Axes对象,也可以是Axes数组   对象(如果创建了多个子图)。尺寸图   可以使用squeeze关键字控制结果数组的大小,请参见   以上。

如果subplots()仅返回一个轴,那么它将返回该Axes对象而不是列表,因此您应该将调用修改为:

df[df['Species'] == unv[i]].plot( (...) ,ax=ax, (...) )