小能豆

如何在散点图 matplotlib 中缩小图例元素?

javascript

假设我有这个散点图,并且想保留图中点的大小,但在图例中,我想将大小表示为 1,2,…而不是 50,100,…

1.png

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
a2 = 300*np.random.rand(N)

sc = plt.scatter(x, y, s=a2, alpha=0.5)
plt.legend(*sc.legend_elements("sizes", num=6))
plt.show()

阅读 56

收藏
2025-02-27

共1个答案

小能豆

视情况而定。如果您想要显示的数字是任意的,即与实际大小无关,则可以提供数字列表作为标签。

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
a2 = 300*np.random.rand(N)

sc = plt.scatter(x, y, s=a2, alpha=0.5)
plt.legend(sc.legend_elements("sizes", num=6)[0], [1,2,3,4,5])
plt.show()

然而,如果要显示的数字和某些数据之间存在关系,

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
a3 = np.random.randint(1,6, size=N)

f = lambda a: 12*a**2       # function to calculate size from data
g = lambda s: np.sqrt(s/12) # inverse function to calc. data from size

sc = plt.scatter(x, y, s=f(a3), alpha=0.5)
plt.legend(*sc.legend_elements("sizes", num=5, func=g))
plt.show()
2025-02-27