我怎样才能在ggplot2中制作一个函数,让geom_bar()制作一个条形图,让我检查向量中的颜色?

问题描述 投票:0回答:1

我想做一个函数,让我快速检查存储在一个向量中的颜色。例如,我有这样一个向量。

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()的解决方案。

r ggplot2
1个回答
1
投票

这是不可行的,因为你需要明确地定义各级别的 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)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.