有没有办法在散点图中添加辅助图例,散点图的大小与某些数据成正比?
我编写了以下代码来生成散点图。散点图的颜色代表年份(取自用户定义的df),而散点图的大小代表变量3(也取自df但是原始数据):
import pandas as pd
colors = pd.DataFrame({'1985':'red','1990':'b','1995':'k','2000':'g','2005':'m','2010':'y'}, index=[0,1,2,3,4,5])
fig = plt.figure()
ax = fig.add_subplot(111)
for i in df.keys():
df[i].plot(kind='scatter',x='variable1',y='variable2',ax=ax,label=i,s=df[i]['variable3']/100, c=colors[i])
ax.legend(loc='upper right')
ax.set_xlabel("Variable 1")
ax.set_ylabel("Variable 2")
此代码(包含我的数据)生成以下图表:
因此,虽然颜色/年份的定义很清楚,但分散的大小却没有。
如何添加定义散点大小意味着什么的辅助或附加图例?
答案 0 :(得分:3)
查看http://matplotlib.org/users/legend_guide.html。
它显示了如何生成多个图例(大约一半),还有另一个示例显示如何设置标记大小。
如果这不起作用,那么您也可以创建自定义图例(最后一个示例)。
答案 1 :(得分:3)
您需要自己创建第二个图例,即您需要创建一些艺术家来填充图例。在分散的情况下,我们可以使用普通plot
并相应地设置标记。
这在以下示例中显示。要实际添加第二个图例,我们需要将第一个图例添加到轴,以便新图例不会覆盖第一个图例。
import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np; np.random.seed(1)
import pandas as pd
plt.rcParams["figure.subplot.right"] = 0.8
v = np.random.rand(30,4)
v[:,2] = np.random.choice(np.arange(1980,2015,5), size=30)
v[:,3] = np.random.randint(5,13,size=30)
df= pd.DataFrame(v, columns=["x","y","year","quality"])
df.year = df.year.values.astype(int)
fig, ax = plt.subplots()
for i, (name, dff) in enumerate(df.groupby("year")):
c = matplotlib.colors.to_hex(plt.cm.jet(i/7.))
dff.plot(kind='scatter',x='x',y='y', label=name, c=c,
s=dff.quality**2, ax=ax)
leg = plt.legend(loc=(1.03,0), title="Year")
ax.add_artist(leg)
h = [plt.plot([],[], color="gray", marker="o", ms=i, ls="")[0] for i in range(5,13)]
plt.legend(handles=h, labels=range(5,13),loc=(1.03,0.5), title="Quality")
plt.show()