使用此代码绘制虹膜数据集会给我一个额外的空图:
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()
答案 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, (...) )