【问题标题】:How to plot a scatter plot which would also represent the histogram for y value for each value for x如何绘制散点图,该散点图也表示 x 的每个值的 y 值的直方图
【发布时间】:2021-04-25 22:47:04
【问题描述】:

我有一组 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 很陌生,因此感谢您提供更多解释。

提前谢谢你。 (也可以让具有相同值的点以相同的颜色重复出现吗?)

【问题讨论】:

    标签: python matplotlib histogram scatter


    【解决方案1】:

    这是一个适合你的代码:

    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 的值。那么我的计数和你的相差不大。

    结果如下:

    【讨论】:

    • 您好,感谢您的回答和解释。这非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多