首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中对(x,y)-coordinate点进行颜色编码

如何在python中对(x,y)-coordinate点进行颜色编码
EN

Stack Overflow用户
提问于 2020-05-12 02:04:12
回答 2查看 301关注 0票数 1

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

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

代码语言:javascript
复制
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()

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-12 02:38:28

如果你想用不同的颜色绘制每个象限,你需要以某种方式将你的数据映射到4个不同的数字,每个象限一个。下面是一种简单的方法:

代码语言:javascript
复制
quadrant = (data[:, 0] > 0).astype(int) + 2 * (data[:, 1] > 0).astype(int)

现在呼叫

代码语言:javascript
复制
plt.scatter(data[:,0], data[:,1], s=20, c=quadrant, cmap='jet')

注意:如果这是您想要的,那么相对于jet,您可能更喜欢qualitative colormap

如果您想要平滑过渡,则需要将每个维度映射到正交颜色维度。下面是如何在RGB颜色空间中做这件事,但这看起来有点丑陋:

代码语言:javascript
复制
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轴上映射了绿色。所以右上角的一个点是黄色的,因为它有最大的红色和绿色。

票数 2
EN

Stack Overflow用户

发布于 2020-05-12 02:35:30

更改您的c参数,例如:

代码语言:javascript
复制
plt.scatter(data[:,0], data[:,1], c=np.abs(data[:,0]))

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61736255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档