![](/img/trans.png)
[英]Python: How to plot scatter plot at specific point on map in cartopy?
[英]Python scatter plot - how to see number of entries per point
我有重复很多数据条目的数据点(创建许多重叠的(x,y)点),并且我真的很想知道图中每个点的条目数。 有没有简单的方法可以做到这一点(除了显然可以编写一段代码来做到这一点之外?)
首先,将您的观点归入元组列表:
L = [(1,2), (0,0), (0,0), (1,2), (1,2), (3,4)]
我假设您正在从文件或其他内容中读取数据,并且不像上面一样对它进行硬编码,因此请修改导入例程以提供元组列表,或对导入的数据进行后处理以形成表格您的元组列表。
我为什么要继续学习元组? 由于它们是可散列的,因此可以用于建立集合:
S = set(L)
print (S)
set([(1, 2), (0, 0), (3, 4)])
现在,我们在数据中拥有所有独特的点,是的! ...但是每个重复多少次? 可以通过在列表中对它们进行计数来完成...或太懒了以至于无法使用list count方法来获取列表以对其自身进行计数:
F = {}
for i in list(S):
F[i] = L.count(i)
现在F是一个字典,其中包含我们每个(X,Y)点的频率表F.keys()将为您提供所有唯一的位置,并且该字典包含每个点发生了多少次。 现在我们要做的就是绘制它:
from matplotlib.pyplot import figure, show
fig = figure()
sub = fig.add_subplot(111)
由于我们使用的是元组的怪异列表,因此我们需要使用一些列表推导来将数据恢复为类似图的格式:
K = F.keys()
Xs = [i[0] for i in K]
Ys = [i[1] for i in K]
现在它将很好地绘制:
sub.plot(Xs, Ys, 'bo')
可以用我们的频率注释该图,如下所示:
for i in K:
sub.annotate(F[i], xy=i)
显示情节:
show()
然后您将获得如下内容:
如果两点之间的距离不太近,我建议您使用气泡图。 重叠点的数量将由气泡的大小表示。
您可以在电子表格(使用Excel)或Javascript (使用Google图表)中执行此操作 。
您也可以使用颜色来表示每个散点的出现次数。 请注意,我的代码基于@Mark的答案。
import numpy as np
import matplotlib as ml
import matplotlib.pyplot as plt
# generate some points
points = np.random.rand(2,200).round(decimals=1)*10
# count occurences
L = [tuple(ii) for ii in points.T]
S = set(L)
F = {}
for i in list(S):
F[i] = L.count(i)
# make counts-array of same length as points and attribute colours
C = np.array([F[(x, y)] for x,y in zip(points[0], points[1])])
norm = ml.colors.Normalize(0, vmax=C.max())
colours = [ml.cm.ScalarMappable(norm=norm, cmap='Reds').to_rgba(c) for c in C]
# plot figure
fig, ax = plt.subplots(1,1)
p = ax.scatter(points[0], points[1], c=colours, edgecolor='k')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.