以下重现问题中的代码图。
选择图例有点麻烦,因为我们必须手动定义一些代理艺术家来放置图例并删除通过 seaborn 样式生成的第一个自动图例条目。
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset("iris")
plt.scatter(iris.sepal_width, iris.sepal_length,
c = iris.petal_length, s=(iris.petal_width**2)*60, cmap="viridis")
ax = plt.gca()
plt.colorbar(label="petal_length")
plt.xlabel("sepal_width")
plt.ylabel("sepal_length")
#make a legend:
pws = [0.5, 1, 1.5, 2., 2.5]
for pw in pws:
plt.scatter([], [], s=(pw**2)*60, c="k",label=str(pw))
h, l = plt.gca().get_legend_handles_labels()
plt.legend(h[1:], l[1:], labelspacing=1.2, title="petal_width", borderpad=1,
frameon=True, framealpha=0.6, edgecolor="k", facecolor="w")
plt.show()
请注意,大小参数s 表示点的面积。所以为了使直径与显示的数量成正比,它必须是平方的。