问题描述
我有一组 X 和 Y 数据点(大约 20k),我想用散点图表示它们。
数据集看起来有些东西列出了这个
x = [1,1,2,2]
y = [3.1,3.1,2]
(数据实际数据集中并非所有值都是整数)
我想用颜色制作散点图,其中颜色表示特定“x”的“y”中特定值的频率
为此,我试图计算每个 x 值的 y 直方图,但我总是得到一个错误的图。我使用的代码如下所示
x = [1,2]
y = [3.1,2]
I = []
Y = []
C = []
for i in range (0,len(x)):
if x[i] not in I :
I.append(x[i])
for j in range (0,len(x)):
if x[i] == x[j]:
Y.append(y[j])
u,c = np.unique(Y,return_counts=True)
C.append(c)
Y = []
plt.scatter(x,y,s=70,c=C,cmap='RdYlBu',marker='o',edgecolors='black',linewidth=1,alpha=7)
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar()
最终的情节是这样的 final plot
如果有人能告诉我我在哪里犯了错误或者我怎么可能做到这一点,那将非常有帮助。我对 python 很陌生,所以请多多解释。
先谢谢你。 (是否也可以使具有相同值的点以相同颜色重复出现?)
解决方法
这是一个适合你的代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,1,2,2])
y = np.array([3.1,3.1,2])
X=[]
Y=[]
C=[]
for i in np.unique(x):
new_y = y[np.where(x==i)]
unique,count = np.unique(new_y,return_counts=True)
for j in range(len(unique)):
X.append(i)
Y.append(unique[j])
C.append(count[j])
plt.scatter(X,Y,c=C)
plt.colorbar()
我所做的是,对于 x 的每个“唯一”值,我使用内置的 numpy 函数 where 检查 y 的值。那我的数和你的没有太大区别。
结果如下: