numpy 使用(n,3)数组创建散点图,其中n是数据集中的数据点数量,作为plt.scatter()中的'color'参数

2guxujil  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(102)

我正在尝试重新创建这个脚本:

这是我目前掌握的情况:

limits = [-2.25,2.25,-2.25,2.25] # [xmin,xmax,ymin,ymax]

x   = data['x']
y   = data['y']
rows,cols = data.shape

colors = np.array([np.arange(0,1,1/5) for row in range(0,5)]).T

sizes     = np.linspace(1,rows+1, num=rows)

plt.scatter(x, y, s=sizes, c = colors, cmap='gist_heat')
plt.xlabel("y")
plt.ylabel("x")
plt.xlim(limits[0],limits[1])
plt.ylim(limits[2],limits[3])
plt.title('2D Data')
plt.show()

我如何让黑色变红。显然我应该使用colors参数,其中“colors”必须是一个(n,3)NumPy数组,其中n是数据点的数量,三列中的每一列对应于范围[0,1]中的RGB值
我使用(5,5)矩阵和cmap会有更好的运气。提前感谢你的帮助!

huus2vyu

huus2vyu1#

一个想法是创建rgb值,其中r0平滑地变为1,而gb都从0变为0.3

import matplotlib.pyplot as plt
import numpy as np

limits = [-2.25, 2.25, -2.25, 2.25]  # [xmin,xmax,ymin,ymax]

x = np.repeat(np.linspace(0, 1, 5), 5)
y = np.tile(np.linspace(0, 1, 5), 5)
rows, cols = 5, 5

colors = np.array([np.linspace(0, 1, rows*cols),
                   np.linspace(0, 0.3, rows*cols),
                   np.linspace(0, 0.3, rows*cols)]).T
sizes = np.arange(1, rows*cols + 1)

plt.scatter(x, y, s=sizes, c=colors)
plt.xlabel("y")
plt.ylabel("x")
plt.xlim(limits[0], limits[1])
plt.ylim(limits[2], limits[3])
plt.title('2D Data')
plt.show()

rdrgkggo

rdrgkggo2#

这对我很有效,但我用的是黑变绿色,而不是黑变红。

limits = [-2.25, 2.25, -2.25, 2.25]

x = data['x'].to_numpy()
y = data['y'].to_numpy()
rows, cols = data.shape

black = np.array([0, 0, 0])
green = np.array([0, 1, 0])
t = np.linspace(0, 1, 25).reshape(-1, 1)
colors = t * green + (1 - t) * black

s = np.linspace(0, 1, 25)
sizes = s * (100 - 10) + 10

plt.figure(figsize=(10,5))
plt.scatter(x, y, c=colors, s=sizes)
plt.xlabel("y")
plt.ylabel("x")
plt.xlim(limits[0],limits[1])
plt.ylim(limits[2],limits[3])
plt.title('2D Data')
plt.show()

相关问题