Python 3.x Python matplotlib基于更大数据集的值缩放y

Python 3.x Python matplotlib基于更大数据集的值缩放y,python-3.x,matplotlib,colormap,Python 3.x,Matplotlib,Colormap,我想用一个数据集的值绘制一个图,该数据集是一个较大数据集的子集,我想根据这些值在较大数据集中的位置缩放绘制的颜色 例如,如果我有df1(较大的数据集)和df2(较小的数据集),我想从df2绘制一列,这样点就可以用一个从红色到绿色的颜色贴图着色,其中限制基于df1相应较大列的最小值(红色)和最大值(绿色) 例如: import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm n = 50 N = n*1

我想用一个数据集的值绘制一个图,该数据集是一个较大数据集的子集,我想根据这些值在较大数据集中的位置缩放绘制的颜色

例如,如果我有df1(较大的数据集)和df2(较小的数据集),我想从df2绘制一列,这样点就可以用一个从红色到绿色的颜色贴图着色,其中限制基于df1相应较大列的最小值(红色)和最大值(绿色)

例如:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

n = 50
N = n*10
this_mean = 5
group_mean = 3

# column to plot
y = np.random.normal(this_mean, 1, 50)
x = list(range(n))

# From within larger dataset
Y = np.random.normal(group_mean,1,N)
X = list(range(N))
根据在该轴上绘制的数据进行缩放即可:

fig, ax = plt.subplots(1, 2, figsize=(10,4), sharey=True)

ax[0].scatter(x, y, c=y, cmap=cm.RdYlGn)
ax[1].scatter(X, Y, c=Y, cmap=cm.RdYlGn)
ax[0].set_title('subset')
ax[1].set_title('all')
plt.show()

在这个例子中,我真正想要的是左图上的颜色与右图上的颜色相对应,所以我们希望看到它的最小值被涂成橙色,而大多数其他点被涂成非常绿色

但是,当我尝试按较大的数据
Y
进行缩放时,显然存在大小不匹配错误:

plt.scatter(x, y, c=Y, cmap=cm.RdYlGn)

ValueError: 'c' argument has 500 elements, which is not acceptable for use with 'x' with size 50, 'y' with size 50.

我不知道如何才能做到这一点。另外,在本例中,
y
的数据实际上不是从
y
中派生出来的,而是与我的实际数据集一起。我不确定这对解决方案是否重要。

您可以首先绘制完整的集合,并从中获取颜色映射和规格化,然后将其应用于子集绘制

# First plot the complete set
sc = ax[1].scatter(X, Y, c=Y, cmap=cm.RdYlGn)
# Plot the subset with the colormap and normalization
# taken from the complete set
ax[0].scatter(x, y, c=y, cmap=sc.cmap, norm=sc.norm)

更一般地说,您还可以在打印任何内容之前定义颜色映射和规格化,并将其用于两种打印

cmap = cm.RdYlGn
norm = plt.Normalize(Y.min(), Y.max())

#...

ax[0].scatter(x, y, c=y, cmap=cmap, norm=norm)
ax[1].scatter(X, Y, c=Y, cmap=cmap, norm=norm)