繁体   English   中英

Python散点图-如何查看每点的条目数

[英]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图表)中执行此操作

您可以使用多轴。
查看这些库示例以获取灵感。

从Matplotlib 1.4.2文档中:

参考文献:

multiple_yaxis_with_spines.py

Matplotlib示例

源代码:

  1. plot_bmh.py
  2. two_scales.py
  3. multiple_yaxis_with_spines.py

例子:

plot_bmh.png two_scales.png multiple_yaxis_with_spines.png

您也可以使用颜色来表示每个散点的出现次数。 请注意,我的代码基于@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM