Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyplot图例/键,但用于比例,如地图上_Python_Matplotlib_Plot_Scatter Plot - Fatal编程技术网

Python Pyplot图例/键,但用于比例,如地图上

Python Pyplot图例/键,但用于比例,如地图上,python,matplotlib,plot,scatter-plot,Python,Matplotlib,Plot,Scatter Plot,我正在做一个散点图,其中标记的大小由一个列表给出,因此每个标记都是不同的。有没有办法添加一个键,上面写着“这个大小的圆等于这个值”等等?就像地图上的按键显示了1英寸等于1英里。 如果这很重要的话,我会在jupyter笔记本上做这件事,但我认为这不重要 编辑:为了澄清,每个数据点是许多其他数据点的平均值,每个标记的大小对应于计算该平均值的数据点数量。例如,一个较小的点是50个数字的中位数,而一个较大的标记是150个数字的中位数。所以它们对应的数字也不像地图那样是物理尺寸 我已经按我所希望的方式缩放

我正在做一个散点图,其中标记的大小由一个列表给出,因此每个标记都是不同的。有没有办法添加一个键,上面写着“这个大小的圆等于这个值”等等?就像地图上的按键显示了1英寸等于1英里。 如果这很重要的话,我会在jupyter笔记本上做这件事,但我认为这不重要

编辑:为了澄清,每个数据点是许多其他数据点的平均值,每个标记的大小对应于计算该平均值的数据点数量。例如,一个较小的点是50个数字的中位数,而一个较大的标记是150个数字的中位数。所以它们对应的数字也不像地图那样是物理尺寸


我已经按我所希望的方式缩放了标记,我想要的是一个图例/键,它指示标记大小如何与其来源的值相关。

使用中的参数
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()
产生,


据我所知,您希望标记按比例缩放。这在
plt.scatter()
中是不可能的,因为它的标记大小总是以像素为单位。一个选项是使用补丁并将其添加到补丁集合

这里有一个例子

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()
给出下面的图,深蓝色的补丁是一种显示标准大小的键


这不是提问者的要求。相反,问题要求使用与绘图数据值相关的标记。但是,
markersize
以点为单位,因此它无法给出与数据的关系。@ImportanceOfBeingErnest,thx供您更正。我刚刚更新了我的答案。仍然不确定这是否是要求的。标记大小仍以像素为单位,而不是数据单位。如果你缩放你的绘图,比例会改变,但标记大小保持不变。问题不太清楚。标记的大小是否应表示某个值,例如10像素标记为1英寸,12像素标记为2英寸,或者标记大小是否应实际链接到轴,以便1英寸标记在打印比例上的长度为1英寸?后者可能是在拓扑图中遇到的问题,但是阅读你的问题,我不确定你的意思是否是这样。您能告诉轴上应该有多少数量,以及您是否希望以不同的比例绘图(缩放绘图等)?