我想做一个函数,让我快速检查存储在一个向量中的颜色。例如,我有这样一个向量。
mycolors <- c("#009900", "#69ce69", "#56B4E9", "#CCCCCC", "#E69F00", "#D55E00")
我试着对下面的函数做了很多不同的变化 来查看哪个颜色在向量的哪个位置以及它的外观。
test.palette <- function(cbPalette){
datatest <- data.frame(
col = cbPalette,
x = 1:length(cbPalette),
val = rep(1, length(cbPalette))
)
datatest$col <- levels(datatest$col)[datatest$col]
print(datatest)
myplot <- ggplot(data = datatest, mapping = aes(x = x, y = val, fill = col)) +
geom_bar(stat="identity", width=.5) +
# scale_fill_manual(values = rev(datatest$col))
scale_fill_manual(values = datatest$col)
print(myplot)
}
mycolors <- c("#009900", "#69ce69", "#56B4E9", "#CCCCCC", "#E69F00", "#D55E00")
test.palette(cbPalette = mycolors)
我希望达到的结果是在我的矢量中,每一种颜色都有一个条形图,其中第一个条形图的颜色被保存为矢量mycolors中的第一个字符串。在每个条形图的下面,我希望有与该条形图颜色相对应的 mycolors 中的索引。我还想在每个颜色对应的 mycolors 中的文本字符串旁边有一个图例,其中包括条形图的颜色。
问题是条形图的颜色与向量的顺序不一样,而且图例中的颜色与旁边的标签不匹配。
也许可以用一种更简单的方法来检查向量中的颜色,但是由于我将使用ggplot2来制作条形图,重用mycolors和其他向量中的颜色,所以我非常希望能有一个使用ggplot2和geom_bar()的解决方案。
这是不可行的,因为你需要明确地定义各级别的 fill
美学值。否则,R只是按字母顺序进行排序。
所以,你的代码就变成了。
test.palette <- function(cbPalette){
require(ggplot2)
datatest <- data.frame(
col = cbPalette,
x = 1:length(cbPalette),
val = rep(1, length(cbPalette))
)
datatest$col <- levels(datatest$col)[datatest$col]
print(datatest)
myplot <- ggplot(data = datatest,
mapping = aes(x = x, y = val, fill = factor(col, levels = col))) +
geom_bar(stat = "identity", width = .5) +
scale_fill_manual(values = datatest$col, name = "My Legend")
print(myplot)
}
mycolors <- c("#009900", "#69ce69", "#56B4E9", "#CCCCCC", "#E69F00", "#D55E00")
test.palette(cbPalette = mycolors)