我正在尝试在ggplot2中创建一个新主题来绘制我所在国家的政党,我想为某些像其他的颜色设置颜色,例如random_party_1 y random_party_2设置随机颜色。
data <- data.frame(party = c('FA','PN', 'random_party1','random_party2', 'FA','PN', 'random_party1','random_party2'),
year = c(2010, 2010, 2010, 2010, 2008, 2008, 2008, 2008),
value = c(50, 20, 30, 10, 50, 50, NA, NA),
color = c('#013197','#B0C2D3','assign_random_color1','assign_random_color2','#013197','#B0C2D3','assign_random_color','assign_random_color'))
然后我想将其用作填充或颜色参数,但是我不知道如何在不手动声明的情况下实现它,因为它将取决于每年的数据:
cols <- c("FA" = "#013197", "PN" = "#B0C2D3", "random_party1" = "assign_random_color1", "random_party2" = "assign_random_color2")
p + scale_colour_manual(values = cols)
答案 0 :(得分:1)
我认为实现此目标的最佳方法是通过自定义函数:
colorize <- function(vec)
{
levs <- if(is.factor(vec)) levels(vec) else levels(factor(vec))
predefined <- c("FA", "PN")
pal <- c('#013197','#B0C2D3')
pal <- pal[match(levs, predefined)]
blanks <- which(is.na(pal))
pal[blanks] <- sample(colours(100), length(blanks))
pal
}
因此,假设我们这样设置您的地块:
p <- ggplot(data, aes(factor(year), value, fill = party)) + geom_col(position = "dodge")
然后,我们可以运行一次代码,以获取预定义方的固定颜色和未分配方的随机颜色:
p + scale_fill_manual(values = colorize(data$party))
如果我们再次运行完全相同的代码,我们只能看到随机方的颜色发生变化:
p + scale_fill_manual(values = colorize(data$party))
由reprex package(v0.3.0)于2020-06-11创建