如何绘制散点图,它也代表 x 的每个值的 y 值的直方图

How to plot a scatter plot which would also represent the histogram for y value for each value for x

我有一组 X 和 Y 数据点(大约 20k),我想用散点图表示。

数据集看起来有点列表这个

x = [1, 1, 2, 1, 2, 1, 1, 2]

y = [3.1, 3.1, 3.1, 1, 2, 3.1, 1, 2]

(数据实际数据集中并非所有值都是整数)

我想制作一个带有颜色的散点图,其中颜色表示特定 'x'

中特定值在 'y' 中出现的频率

为此,我尝试为每个 x 值计算 y 的直方图,但我总是得到一个错误的图。我使用的代码如下所示

 x = [1, 1, 2, 1, 2, 1, 1, 2]
    
 y = [3.1, 3.1, 3.1, 1, 2, 3.1, 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, 1, 2, 1, 1, 2])

y = np.array([3.1, 3.1, 3.1, 1, 2, 3.1, 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 的值。那我算的跟你差不了多少

结果如下: