创建 ggplot 主题:可变级别的自定义颜色
Creating ggplot theme: custom colors for variable levels
我正在尝试在 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)
我认为实现此目的的最佳方法是通过自定义函数:
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 年 6 月 11 日创建
我正在尝试在 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)
我认为实现此目的的最佳方法是通过自定义函数:
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 年 6 月 11 日创建