我正在制作一个散点图,其中标记的大小由列表给出,因此每个都是不同的。有没有办法添加一个键,说“这个大小的圆圈等于这个值”'等等?就像地图有键的地方一样,它表示1英寸等于1英里。 如果它非常重要,我会在jupyter笔记本中这样做,但我认为这不重要。
编辑:为了澄清,每个数据点是许多其他数据点的平均值,每个标记的大小对应于计算该平均值的数据点数。因此,例如,较小点之一是50个数字的中值,而较大标记之一是数据点,即150个数字的中值。因此,它们对应的数字也不是物理尺寸,就像地图一样。
我已经按照我希望的那样缩放了标记,我想要的是一个图例/关键字,指示标记大小与其来源的关系。
答案 0 :(得分:1)
据我了解,您希望您的标记能够扩展。 plt.scatter()
无法实现这一点,因为它的标记大小始终为像素。一个选项是使用补丁并将它们添加到PatchCollection。
这是一个例子
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.collections import PatchCollection
patches = []
coordinates = [(0,0), (2,0), (5,2), (1,7.6), (6,7), (2,4), (-1,5)]
sizes = 0.9+np.random.rand(len(coordinates),2)*1.99
print sizes
for i, co in enumerate(coordinates):
rect = mpatches.Rectangle(co, sizes[i,0], sizes[i,1], ec="k")
patches.append(rect)
fig, ax = plt.subplots(figsize=(6,5))
ax.set_aspect("equal")
colors = np.linspace(0, 1, len(patches))
collection = PatchCollection(patches, cmap=plt.cm.hsv, alpha=0.3)
collection.set_array(np.array(colors))
ax.add_collection(collection)
norm_scale = mpatches.Rectangle((7,-1), 2,2, ec="k", facecolor="b")
ax.add_patch(norm_scale)
ax.set_xlim([-2,10])
ax.set_ylim([-2,10])
ax.set_ylabel("position [meters]")
ax.set_xlabel("position [meters]")
ax.set_title("Tents on a meddow")
ax.text(8,0.9, "2 m", color="w", ha="center", va="top")
ax.text(7.1,0, "2 m", color="w", ha="left", va="center", rotation=90)
plt.show()
给出以下图表,其中深蓝色补丁是显示标准尺寸的关键字。
答案 1 :(得分:0)
在plt.scatter中使用参数s
(点数^ 2)。这是一个MWE。
import matplotlib.pyplot as plt
value_and_markersize = {value:4**value for value in range(1, 10)}
x = [2, 4, 5, 7]
y = [0]*len(x)
s = [value_and_markersize[value] for value in x]
plt.scatter(x, y, s=s)
plt.show()
产生,