【发布时间】:2019-09-02 18:43:23
【问题描述】:
我想使用从较大数据集中子集的数据集中的值绘制一个图,并且我想根据这些值在较大数据集中的位置来缩放绘制的颜色。
例如,如果我有 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 子集的,但它们是我的实际数据集。不过,我不确定这对解决方案是否重要。
【问题讨论】:
标签: python-3.x matplotlib colormap