gpt4 book ai didi

r - 给定一个有限的调色板,如何从热到冷排序,即发散

转载 作者:行者123 更新时间:2023-12-03 22:19:19 28 4
gpt4 key购买 nike

更新 (以下原问题)
问题已部分解决。
仍在努力弄清楚如何扩展到其他颜色组合
如果我使用此代码

hLIM <- rgb2hsv(col2rgb('#8000ff'))['h', ]
sLIM <- rgb2hsv(col2rgb('#8000ff'))['s', ]
vLIM <- rgb2hsv(col2rgb('#8000ff'))['v', ]
rankorder <- order((hLIM-tHSVcol[,1] + (hLIM < tHSVcol[,1])),
(sLIM-tHSVcol[,2] + (sLIM < tHSVcol[,2])),
(vLIM-tHSVcol[,3] + (vLIM < tHSVcol[,3])))

orderType <- "HSV Ordering"
我能够对此进行排序
enter image description here
未分类调色板: "#313695","#fdae61","#a50026","#ffffbf","#f46d43","#fee090","#e0f3f8","#74add1","#d73027","#4575b4","#abd9e9"成这个
enter image description here
排序调色板: "#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1", "#4575b4","#313695"但是,我很难将其扩展到其他颜色组合。
例如,当我尝试对此进行排序时
enter image description here
未分类
"#22325f" "#88ce64" "#fbd234" "#b8091f" "#682f4e" "#fdea6e" "#4aec6a" "#fb7894" "#f13111" "#2584a0" "#460809" "#00699e" "#391b72" "#03471d" "#ba0841"
我明白了(有趣的是,我不确定完美排序的调色板会是什么样子——当然没有散布的暗带!)
enter image description here
不完全排序
"#391b72" "#22325f" "#00699e" "#2584a0" "#03471d" "#4aec6a" "#88ce64" "#fdea6e" "#fbd234" "#f13111" "#460809" "#b8091f" "#fb7894" "#ba0841" "#682f4e"

原始问题
我有一个有限的调色板,如何从热(红色)到冷(蓝色)排序。
这个怎么转
enter image description here
未分类调色板: "#313695","#fdae61","#a50026","#ffffbf","#f46d43","#fee090","#e0f3f8","#74add1","#d73027","#4575b4","#abd9e9"成这个
enter image description here
排序调色板: "#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1", "#4575b4","#313695"R 代码位于消息的末尾。我尝试按 RGB 的组合排序和 HSV ,(基于评论或未评论的内容)但无济于事。
我无法在以下值中找到模式(颜色排序不同)
非常感谢任何指导。
RGB 排序颜色
> tRGBcol
red green blue
[1,] 165 0 38
[2,] 215 48 39
[3,] 244 109 67
[4,] 253 174 97
[5,] 254 224 144
[6,] 255 255 191
[7,] 224 243 248
[8,] 171 217 233
[9,] 116 173 209
[10,] 69 117 180
[11,] 49 54 149
HSV 排序颜色
> tHSVcol
h s v
[1,] 0.961616162 1.00000000 0.6470588
[2,] 0.008522727 0.81860465 0.8431373
[3,] 0.039548023 0.72540984 0.9568627
[4,] 0.082264957 0.61660079 0.9921569
[5,] 0.121212121 0.43307087 0.9960784
[6,] 0.166666667 0.25098039 1.0000000
[7,] 0.534722222 0.09677419 0.9725490
[8,] 0.543010753 0.26609442 0.9137255
[9,] 0.564516129 0.44497608 0.8196078
[10,] 0.594594595 0.61666667 0.7058824
[11,] 0.658333333 0.67114094 0.5843137
手动拆分十六进制颜色
a5  00  26
d7 30 27
f4 6d 43
fd ae 61
fe e0 90
ff ff bf
e0 f3 f8
ab d9 e9
74 ad d1
45 75 b4
31 36 95
代码
RenderPal <- function(x,name){

if ((missing(x)) || (missing(name))){
stop("Internal error, please troubleshoot")
}
n <- length(x)
old <- graphics::par(mar = c(0.5, 0.5, 0.5, 0.5))
on.exit(graphics::par(old))

graphics::image(1:n, 1, as.matrix(1:n), col = x,
ylab = "", xaxt = "n", yaxt = "n", bty = "n")
graphics::rect(0, 0.9, n + 1, 1.1, col = grDevices::rgb(1, 1, 1, 0.8), border = NA)
graphics::text((n + 1) / 2, 1, labels = name, cex = 2, family = "serif")
}

i <- NULL
oldPal <- NULL
rankorder <- c(1,2,3,4,5,6,7,8,9,10,11)
orderedPal<- NULL
RGBcol <- NULL
HSVcol <- NULL
tHSVcol <- NULL
orderType <- "Unsorted"



oldPal <- c("#313695","#fdae61","#a50026","#ffffbf","#f46d43","#fee090","#e0f3f8","#74add1","#d73027","#4575b4","#abd9e9")

# Print hex values
oldPal

# Convert Hex to RGB
RGBcol <- col2rgb(oldPal)

# Print RGB values
RGBcol

# Transpose matrix
tRGBcol <- t(RGBcol)

# Print matrix
tRGBcol

# Uncomment following to order by Red, Green, then Blue
# rankorder <- order(tRGBcol[,1],tRGBcol[,2],tRGBcol[,3])
# orderType <- "Red Ordering"

# Uncomment following to order by Blue, Green, then Red
# rankorder <- order(tRGBcol[,3],tRGBcol[,2],tRGBcol[,1])
# orderType <- "Blue Ordering"

# Uncomment following to order by Green, Blue then Red
# rankorder <- order(tRGBcol[,2],tRGBcol[,3],tRGBcol[,1])
# orderType <- "Green Ordering"

# Uncomment following to order by Red + Blue
# rANDb <- apply(tRGBcol[,c(1,3)],1,sum)
# rankorder <- order(rANDb)
# orderType <- "Red + Blue Ordering"

# Uncomment following to order by Red + Green + Blue
# rANDgANDb <- apply(tRGBcol[,c(1,2,3)],1,sum)
# rankorder <- order(rANDgANDb)
# orderType <- "Red + Green + Blue Ordering"

# Convert RGB to HSV
HSVcol <- rgb2hsv(RGBcol)

# Print matrix
HSVcol

# Transpose matrix
tHSVcol <- t(HSVcol)

# Print matrix
tHSVcol


# Uncomment following to order by Hue, then Saturation, then Value
# rankorder <- order(tHSVcol[,1],tHSVcol[,2],tHSVcol[,3])
# orderType <- "Hue Ordering"

# Uncomment following to order by hANDv = Hue + Value
# hANDv <- apply(tHSVcol[,c(1,3)],1,sum)
# rankorder <- order(hANDv)
# orderType <- "Hue + Value Ordering"

# Uncomment following to order by hPRODv = Hue * Value
# hPRODv <- apply(tHSVcol[,c(1,3)],1,prod)
# rankorder <- order(hPRODv)
# orderType <- "Hue * Value Ordering"

# Combine matrices tRGBcol and tHSVcol
tCombo <- cbind(tRGBcol,tHSVcol)

rankorder

for (i in 1:length(rankorder)){
orderedPal[i] <- oldPal[rankorder[i]]
}

# Print old, unordered palette
oldPal

# Print new, ordered palette
orderedPal

RenderPal(oldPal, "Unordered Palette")
RenderPal(orderedPal, orderType)
编辑:按色调排序时的结果
enter image description here

最佳答案

我几乎得到了你要求的订单:

Coolness = function(P) { 
RGB = col2rgb(P)
(RGB[3,] - RGB[1,]) / (RGB[3,] + RGB[1,])
}

CoolPal = oldPal[order(Coolness(oldPal))]
RenderPal(CoolPal, "Coolness")

Palette Ordered by coolness

但请注意,我已经交换了前两种颜色。你建议的答案说
“#a50026”比“#d73027”更热。我的 Coolness 函数对这两个函数具有相反的顺序。

关于r - 给定一个有限的调色板,如何从热到冷排序,即发散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51158179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com