У меня есть столбчатая диаграмма с накоплением, которая выглядит так:
Хотя цвета выглядят красиво, сбивает с толку то, что так много похожих цветов представляют разные наркотики. Я хотел бы иметь отдельную цветовую палитру для каждой полосы на графике, например, class1 может использовать палитру «Blues», а class2 может использовать палитру «BuGn» (имена цветовых палитр найдены здесь)
Я обнаружил несколько случаев, когда люди вручную кодировали цвета для каждой полосы (например, здесь), но я не уверен, что то, о чем я спрашиваю, возможно - эти столбцы должны быть основаны на палитрах, поскольку в каждом классе наркотиков очень много наркотиков.
Код для создания приведенного выше графика:
library(ggplot2)
library(plyr)
library(RColorBrewer)
drug_name <- c("a", "a", "b", "b", "b", "c", "d", "e", "e", "e", "e", "e", "e",
"f", "f", "g", "g", "g", "g", "h", "i", "j", "j", "j", "k", "k",
"k", "k", "k", "k", "l", "l", "m", "m", "m", "n", "o")
df <- data.frame(drug_name)
#get the frequency of each drug name
df_count <- count(df, 'drug_name')
#add a column that specifies the drug class
df_count$drug_class <- vector(mode='character', length=nrow(df_count))
df_count$drug_class[df_count$drug_name %in% c("a", "c", "e", "f")] <- 'class1'
df_count$drug_class[df_count$drug_name %in% c("b", "o")] <- 'class2'
df_count$drug_class[df_count$drug_name %in% c("d", "h", "i")] <- 'class3'
df_count$drug_class[df_count$drug_name %in% c("g", "j", "k", "l", "m", "n")] <- 'class4'
#expand color palette (from http://novyden.blogspot.com/2013/09/how-to-expand-color-palette-with-ggplot.html)
colorCount = length(unique(df_count$drug_name))
getPalette = colorRampPalette(brewer.pal(9, "Set1"))
test_plot <- ggplot(data = df_count, aes(x=drug_class, y=freq, fill=drug_name) ) + geom_bar(stat="identity") + scale_fill_manual(values=getPalette(colorCount))
test_plot