python - 如何在python中对(x,y)坐标点进行颜色编码
问题描述
我得到了一堆 x,y 坐标。我想绘制这些坐标,但根据它们的值,我想给它们不同的颜色。
显然,这可以通过向cmap
pyplot 的 scatter 函数提供参数来轻松完成:
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 坐标的颜色代码。位于我图左上角的点应该看起来很相似。但它们也应该看起来与左下角的点不同。
我希望我的问题更清楚了。感谢您的帮助!
解决方案
如果你想用不同的颜色绘制每个象限,你需要以某种方式将你的数据映射成 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
如果您想要平滑过渡,则需要将每个维度映射到正交颜色维度。下面是如何在 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 轴上映射了绿色。所以右上角的一个点是黄色的,因为它有最大的红色和绿色。
推荐阅读
- linux - Systemtap 在父进程退出后监控子进程
- kubernetes - 没有创建命名空间 pod/istio-ingressgateway-bd5994d9f-p9chd 的 Istio 容器
- c++ - 在类成员变量 std::array 中使用 {} 会导致初始化数组元素吗?
- r - 在 dplyr (!!paste0, {{}}, as.name(), eval(parse(text=)
- javascript - CKEditor4 Laravel 不解析 HTML,而是输出标签,如
,
- chatbot - 使用带有预定义问题和答案的 Amazon Lex 创建简单的问答聊天机器人
- java - 在 Java 中 subClass 和 SuperClass 具有相同的属性会发生什么?
- python - 如何使用 websocket-client 发送 keepalive 请求?
- socket.io - socket.io 中存储的聊天消息在哪里
- reactjs - 如何在 React 中使用新值更新预填充的输入字段