微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何绘制散点图,该图还表示 x 的每个值的 y 值的直方图

如何解决如何绘制散点图,该图还表示 x 的每个值的 y 值的直方图

我有一组 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 的值。那我的数和你的没有太大区别。

结果如下:

result

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。