ggplot barplot中的颜色与两个堆叠的条混合

时间:2018-03-27 08:01:18

标签: r ggplot2 bar-chart

我尝试用两种不同的渐变颜色绘制ggplot堆积条形图,用于两个条形图中的每一个。 df中的每个值都被分配一个十六进制的颜色代码。然而,颜色在两个条之间混合。

我尝试了多种方法来解决这个问题,但似乎我还没有完全理解这背后的逻辑。 我可以想象有一个简单而优雅的解决方案。

情况就是这样:

# raw data
values <- c(156182263, 51298256, 673688260, 232926061, 0, 104869535, 398192679, 0, 0, 10782158, 27256840, 70810639, 97336000, 169901000, 0, 51202000, 1261181000, 112863000, 85185000, 61680000, 0, 0, 0)
id <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

# construct the df
df <- data.frame(values, id)

# sort the df by id and values
df <- df[with(df, order(id, -values)), ]

# construct object to use for plotting
dat.m <- melt(df, id.vars = "id")

# generate the color for each value
col_f_a <- colorRampPalette(c("aquamarine2", "white"))
col_a <- col_f_a(length(df$id[df$id == 0]))
col_f_b <- colorRampPalette(c("steelblue1", "white"))
col_b <- col_f_b(length(df$id[df$id == 1]))

# get the colors to their respective value in the object for plotting
cols <- vector()
cols <- append(cols, col_a)
cols <- append(cols, col_b)
dat.m["col"] <- cols

# plot
ggplot(dat.m, aes(x = id, y = value, fill = cols)) +
  geom_bar(color = "black", stat = "identity") +
  scale_fill_manual(values = cols) +
  geom_hline(yintercept = 1000000000, lwd = 2) +
  theme(axis.line=element_blank(),
        axis.text.x=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks=element_blank(),
        axis.title.x=element_blank(),
        axis.title.y=element_blank(),
        legend.position="none",
        panel.background=element_blank(),
        panel.border=element_blank(),
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        plot.background=element_blank())

0 个答案:

没有答案