Обновление (Оригинальный вопрос ниже)
Проблема частично решена.
Все еще пытаюсь понять, как распространиться на другие цветовые комбинации
Если я использую этот код
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](https://i.stack.imgur.com/tjM7j.jpg)
Несортированная цветовая палитра:
"#313695","#fdae61","#a50026","#ffffbf","#f46d43","#fee090","#e0f3f8","#74add1","#d73027","#4575b4","#abd9e9"
В это
![enter image description here](https://i.stack.imgur.com/lcmSJ.jpg)
Сортированная цветовая палитра:
"#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1", "#4575b4","#313695"
Однако мне трудно распространить его на другие цветовые комбинации.
Для экземпляра, когда я пытаюсь отсортировать это
![enter image description here](https://i.stack.imgur.com/gGfsu.jpg)
Unsorted
"#22325f" "#88ce64" "#fbd234" "#b8091f" "#682f4e" "#fdea6e" "#4aec6a" "#fb7894" "#f13111" "#2584a0" "#460809" "#00699e" "#391b72" "#03471d" "#ba0841"
Я понял (интересно, я не уверен, как будет выглядеть идеально отсортированная палитра ---- конечно, нет темных полос с вкраплениями!)
![enter image description here](https://i.stack.imgur.com/tJ8k8.jpg)
Неправильно отсортировано
"#391b72" "#22325f" "#00699e" "#2584a0" "#03471d" "#4aec6a" "#88ce64" "#fdea6e" "#fbd234" "#f13111" "#460809" "#b8091f" "#fb7894" "#ba0841" "#682f4e"
Оригинальный вопрос
У меня есть конечная палитра, как сортировать от Hot (красные) к Cold (синие).
Как мне это включить
![enter image description here](https://i.stack.imgur.com/tjM7j.jpg)
Несортированная цветовая палитра:
"#313695","#fdae61","#a50026","#ffffbf","#f46d43","#fee090","#e0f3f8","#74add1","#d73027","#4575b4","#abd9e9"
В это
![enter image description here](https://i.stack.imgur.com/lcmSJ.jpg)
Сортированная цветовая палитра:
"#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 Sorted Color
> 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](https://i.stack.imgur.com/2Hm0g.jpg)