我正在绘制一个分类数据集,并希望使用不同的颜色来表示不同的类别。给定一个n
,我怎样才能得到n
R中最独特的颜色数量?谢谢。如何在R中生成一些最独特的颜色?
回答
您可以使用colorRampPalette
从基地或RColorBrewer
包:
随着colorRampPalette
,您可以按如下方式指定颜色:
colorRampPalette(c("red", "green"))(5)
# [1] "#FF0000" "#BF3F00" "#7F7F00" "#3FBF00" "#00FF00"
您也可以提供十六进制代码,以及:
colorRampPalette(c("#3794bf", "#FFFFFF", "#df8640"))(5)
# [1] "#3794BF" "#9BC9DF" "#FFFFFF" "#EFC29F" "#DF8640"
# Note that the mid color is the mid value...
使用RColorBrewer
您可以使用预先存在的调色板中的颜色:
require(RColorBrewer)
brewer.pal(9, "Set1")
# [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF"
# [9] "#999999"
查看RColorBrewer
其他可用调色板的包。希望这可以帮助。
这里有几个选项:
看一看的
palette
功能:palette(rainbow(6)) # six color rainbow (palette(gray(seq(0,.9,len = 25)))) #grey scale
而且
colorRampPalette
功能:##Move from blue to red in four colours colorRampPalette(c("blue", "red"))(4)
看那
colorBrewer
包(和website)。如果你想分色,然后在网站上选择diverging。例如,library(colorBrewer) brewer.pal(7, "BrBG")
的I want hue网站提供了很多很好的调色板。再次,只需选择你需要的调色板。例如,你可以从网站上的RGB颜色,使你自己的调色板:
palette(c(rgb(170,93,152, maxColorValue=255), rgb(103,143,57, maxColorValue=255), rgb(196,95,46, maxColorValue=255), rgb(79,134,165, maxColorValue=255), rgb(205,71,103, maxColorValue=255), rgb(203,77,202, maxColorValue=255), rgb(115,113,206, maxColorValue=255)))
感谢您的回答。它会产生颜色,但有些不是很有特色。也许我应该在我的问题中更多地强调这一点。 – RNA 2013-03-07 22:15:50
@RNAer我已经更新了我的答案。您可以使用建议3和4来获得** diverging **调色板。 – csgillespie 2013-03-07 22:19:32
'我想色相'是一个很棒的网站。这正是我想要的。给定一个数字,如何生成颜色数量的调色板。但我们可以自动在R中完成吗? – RNA 2013-03-07 22:34:46
我参加了所有的定性调色板从RColorBrewer
包。定性调色板应该提供X个最独特的颜色。当然,混合它们也会以相似的颜色加入到一个调色板中,但这是我可以获得的最好(74种颜色)。
library(RColorBrewer)
n <- 60
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',]
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
pie(rep(1,n), col=sample(col_vector, n))
其它的解决方法是:取所有的R颜色图形设备和从他们的样品。我删除了灰色的阴影,因为它们太相似了。这使得433点的颜色
color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)]
pie(rep(1,n), col=sample(color, n))
与200个色n = 200
:
pie(rep(1,n), col=sample(color, n))
是否有可能将col-col中的十六进制代码转换为相应的颜色名字呢? – Prradep 2017-07-13 13:50:20
@Prradep哪个'col'你的意思是?图形设备中的“颜色”具有名称。如果你的意思是一般情况下,并非所有的十六进制代码都有相应的颜色名称('grDevices'中只有433种颜色,但有更多的十六进制代码) – 2017-07-13 15:31:04
我提到'RColorBrewer'中的col = sample(col_vector,n)''打包在你的代码片段中。例如,如何从样品(col_vector,3)'中找到'#B3E2CD,#E78AC3,#B3DE69'的颜色名称。或者,如何查找由'brewer.pal'函数给出的所有十六进制代码及其颜色名称。 – Prradep 2017-07-13 15:34:53
您也可以尝试randomcoloR
package:
library(randomcoloR)
n <- 20
palette <- distinctColorPalette(n)
你可以看到一组非常独特的颜色选择饼图中可视化(由其他答案的建议在这里)时:
pie(rep(1, n), col=palette)
显示一张饼图与50种颜色:
n <- 50
palette <- distinctColorPalette(n)
pie(rep(1, n), col=palette)
谢谢。我必须使用'unname(distinctColorPalette(n))'来使这个工作与ggplot。我想ggplot需要一个未命名的向量。 'col_vector < - unname(distinctColorPalette(n))'然后 '... + scale_color_manual(values = col_vector)...' – Gaurav 2017-08-22 04:15:42
我会推荐使用大型调色板的外部源。
http://tools.medialab.sciences-po.fr/iwanthue/
具有服务根据各种参数和
从图形设计师透视讨论的一般问题,并给出大量的可用的调色板的实施例以调色板的任何大小构成。
要包含一个调色板从RGB值,你只需要值向量中复制,如如:
colors37 = c("#466791","#60bf37","#953ada","#4fbe6c","#ce49d3","#a7b43d","#5a51dc","#d49f36","#552095","#507f2d","#db37aa","#84b67c","#a06fda","#df462a","#5b83db","#c76c2d","#4f49a3","#82702d","#dd6bbb","#334c22","#d83979","#55baad","#dc4555","#62aad3","#8c3025","#417d61","#862977","#bba672","#403367","#da8a6d","#a79cd4","#71482c","#c689d0","#6b2940","#d593a7","#895c8b","#bd5975")
还有获得最佳鲜明的调色板,而“新”的方式,也关于色盲和可能的黑色和白色转换与Viridis color palettes。
为了得到调色板,只需安装包,并使用功能viridis_pal()
install.packages("viridis")
library(viridis)
viridis_pal(option = "D")(n) # n = number of colors seeked
采用选 “A”, “B”, “C” 和 “d” 这些调色板之间进行选择:
有关更多示例,请访问该软件包的小插图。一些漂亮的例子吧:
也有一个很好的谈话解释YouTube上的好调色板的复杂性:
A Better Default Colormap for Matplotlib | SciPy 2015 | Nathaniel Smith and Stéfan van der Walt
这不太适合独特的颜色。 – 2017-10-13 07:43:31
相关:HTTP:/ /stackoverflow.com/questions/6075140/in-r-how-do-i-change-the-color-value-of-just-one-value-in-ggplot2s-scale-fill-b/6076605#6076605 – 2013-03-07 22:36:25
相关:http://stackoverflow.co m/questions/9563711/r-color-palettes-for-many-data-classes/41230685 – 2017-01-09 20:42:13