如何绘制散点图,它也代表 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 的值。那我算的跟你差不了多少
结果如下:
我有一组 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 的值。那我算的跟你差不了多少
结果如下: