Python matplotlib图例元素大小与func中给定的值不对应
我有一个matplotlib散点图,其中点的大小与点的值对数连接。我想为这个图创建一个图例,并尝试使用以下代码:Python matplotlib图例元素大小与func中给定的值不对应,python,matplotlib,legend,Python,Matplotlib,Legend,我有一个matplotlib散点图,其中点的大小与点的值对数连接。我想为这个图创建一个图例,并尝试使用以下代码: x = df['A'] y = df['B'] colors = df['C'] sizes = np.log10(0.1 * df['C']) / np.log10(1.03) plt.figure(figsize=(5,5)) dots = plt.scatter(x, y, s=sizes, c=colors, alpha=0.5) plt.xlim(-0.005, 0.14
x = df['A']
y = df['B']
colors = df['C']
sizes = np.log10(0.1 * df['C']) / np.log10(1.03)
plt.figure(figsize=(5,5))
dots = plt.scatter(x, y, s=sizes, c=colors, alpha=0.5)
plt.xlim(-0.005, 0.145)
plt.ylim(0, 0.06)
plt.legend(*dots.legend_elements('sizes', num=4, func=lambda x: np.power(1.03, x)))
plt.show()
预期行为:
我希望在图例中看到四条线,其中图例元素的大小与绘图上相应点的大小相同
如果我从dots.legend\u elements
方法中删除func
参数,我的图例中会有4行。但我也希望它们在元素之后有正确的值
现实:
我只看到三行,图例元素与我的size
数组中的大小不同
我的func
参数似乎与np.log10(0.1*x)/np.log10(1.03)
相反,但可能我用错了。解决方案
示例
sizes = np.log10(0.1 * 50) / np.log10(1.03)
#output 54.44868500700143
func(sizes)
#output 49.99999999999999
这就可以了。您只想要4种不同的尺寸吗?(我理解正确吗?@ombk,我希望在
num
参数中放置尽可能多的值。目前是4,是的,但我可能想在将来更改它。如果有办法为我们提供数据帧?是csv文件还是随机制服distributions@ombk,数据框是一个csv文件,C
列包含20到15300的值,大致呈对数正态分布。谢谢!唯一的轻微修正是仅func=lambda x:10*np.power(1.03,x)
@boriskalin事实上,请原谅我的数学生疏,我只是在纸上写的,记不起我的log10
东西。
sizes = np.log10(0.1 * 50) / np.log10(1.03)
#output 54.44868500700143
func(sizes)
#output 49.99999999999999