首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按3个变量着色- Maxwell三角形

按3个变量着色- Maxwell三角形
EN

Stack Overflow用户
提问于 2018-06-14 14:01:12
回答 1查看 1K关注 0票数 4

我有一个由三个变量u,v,w组成的模型,它随时间和空间的变化而变化。我对这三个变量的比率特别感兴趣。但是,与其显示三幅图,每一幅对应一个变量,我更愿意只使用一幅图。

我的想法是使用Maxwell三角形(颜色三角形,参见http://homepages.abdn.ac.uk/npmuseum/article/Maxwell/MaxTri.html)。我可以很容易地缩放每个变量的最大值在1,但我不知道这个想法是否可以实现。如果它有意义的话,它应该已经存在了。我的问题是:

  1. 如何将这三个变量转换为一个表示颜色的值(例如,如果我有一个填充的等高线图,我希望每个网格单元格都有“它的比率”)?
  2. 我可以用颜色三角形作为色条吗?

我试着举一个简单的例子,让它更容易理解:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
# create three arrays for the state variables
# space is a 200x200 grid
size = 200
u = np.random.rand(size,size)
v = np.random.rand(size,size)
w = np.random.rand(size,size)
# now I could create 3 subplots and plot the spatial distribution
# for each variable
# but I want something like
col = np.zeros((200,200))
for i in range(200): # loop in x-direction
    for j in range(200): # loop in y-direction
        col[i,j] = colorTriangle(u[i,j],v[i,j],w[i,j])
plt.contourf(col)

函数colorTriangle不存在。但是我想要这样的东西:如果每个变量在(i,j)处都有相同的值,那么颜色应该是白色的(参见Maxwell三角形)。如果我们只有你,它应该是绿色的。如果我们只有v,它应该是红色的。如果我们只有w,它应该是蓝色的。

如果组合比较复杂,每个变量都应该在一个颜色方向上“拉”,颜色应该根据Maxwell三角形中的位置来选择。

你明白这个主意了吗?它不一定是一个颜色三角形,但我会有这样的信息在一个轮廓图。而颜色三角形将有助于解释颜色。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-17 19:22:15

要回答第一个问题,有许多事情需要注意。

首先,单个值可以表示颜色的唯一方法是使用颜色映射,它将标量映射到颜色。但是,Maxwell三角形不能简化为单个值。

这并不意味着maxwell三角形不能作为一种3D颜色映射,将3个值映射为一个颜色。实际上,这样做是很自然的,因为Maxwell使用了3值abc,这样颜色就可以用RGB坐标表示为(a,b,c)。唯一缺少的是正常化。

在提供的链接中,定义了Maxwell三角形,使得a+b+c=1。然而,matplotlib接受RGB坐标,3在0和1之间浮动,其中white明显是1,1,1,而不是1/3,1/3,1/3。因此,考虑到这一点,每个i,j将有三个值,必须在0到1之间转换为3个浮点数。

因此,我们必须用每个三组的最大值来规范除法,而不是用和来规范除法(以得到a+b+c=1)。

最终,可以使用imshow显示结果图像。

代码语言:javascript
复制
def colorTriangle(r,g,b):
    image = np.stack([r,g,b],axis=2)
    return image/image.max(axis=2)[:,:,None]

size = 200
X,Y = np.meshgrid(np.linspace(0,1,200),np.linspace(0,1,200))
u = np.full_like(X,.2)
v = Y
w = X**2
plt.imshow(colorTriangle(v,u,w),origin='lower',extent=(0,1,0,1)) 
# Note that v is first in order to be represented by red

输出图像如下:

这里可以清楚地看到,对于x和y的小值,其中vw是零,颜色是绿色的,因为u不同于零,比vw大得多。对于大x和小y,w占主导地位,颜色确实是蓝色,而当v占主导地位(大y和小x)时,颜色是红色。还表明,对于所有三个矩阵的等值,得到的颜色是白色的。

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

https://stackoverflow.com/questions/50859342

复制
相关文章

相似问题

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