繁体   English   中英

如何在 python 中对 (x,y) 坐标点进行颜色编码

[英]How to color code (x,y)-coordinate points in python

我得到了一堆 x,y 坐标。 我想 plot 这些坐标,但根据它们的值,我想给它们不同的颜色。

显然,这可以通过向 pyplot 的散点图 function 提供cmap参数来轻松完成:

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
rng = np.random.RandomState(1)
data = rng.randn(500,2)
plt.scatter(data[:,0], data[:,1], s=20, c=data[:,0], cmap='jet')
plt.show()

但是,此代码片段并没有按照我想要的方式执行:我提供的代码将根据它们的 position 仅沿 x 轴对点进行着色。 我想要一个同时考虑 x 和 y 坐标的颜色代码。 位于我图左上角的点应该看起来很相似。 但它们也应该看起来与左下角的点不同。

我希望我的问题更清楚了。 感谢您的帮助!

如果你想 plot 每个象限用不同的颜色,你需要以某种方式将你的数据 map 分成 4 个不同的数字,每个象限 1 个。 这是一种粗略的方法:

quadrant = (data[:, 0] > 0).astype(int) + 2 * (data[:, 1] > 0).astype(int)

现在打电话

plt.scatter(data[:,0], data[:,1], s=20, c=quadrant, cmap='jet')

在此处输入图像描述

请注意,如果这是您想要的,您可能更喜欢定性颜色图而不是jet

如果您想要平滑过渡,则需要将您的每个维度 map 转换为正交颜色维度。 下面是如何在 RGB 颜色空间中执行此操作,但这看起来有点难看:

def normalize(arr):
    arr_min = np.min(arr)
    arr_max = np.max(arr)
    return (arr - arr_min) / (arr_max - arr_min)

red = normalize(data[:, 0])
green  = normalize(data[:, 1])
blue = np.zeros_like(red)
rgb = np.vstack((red, green, blue)).T
rgb = np.vstack((red, green, blue)).T

在此处输入图像描述

现在我们在 x 轴上映射了红色,在 y 轴上映射了绿色。 所以右上角的一个点是黄色的,因为它有最大的红色和绿色。

更改您的c参数,例如:

plt.scatter(data[:,0], data[:,1], c=np.abs(data[:,0]))

您也可以使用例如c=data[:,0]**2+data[:,1]**2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM