R:按元素

时间:2017-12-13 02:56:08

标签: r ggplot2

我试图在R中构建一个简单的数据结构,并且在尝试这样做时非常失败。我的目标是将看起来像这样的东西放在一起:

c("#E08214" = "#E08214", "#E08216" = "#E08216") 

数据结构的目的是帮助我在一个奇怪的条形图中手动分配每个条形图的颜色(我的数据框中标识了十六进制颜色,我打算使用scale_colour_manual(values = c("#E08214" = "#E08214", "#E08216" = "#E08216"))来设置每个条形图&# 39;色彩。

我可以填充我的颜色列表,如下所示:levels(df$color)。我尝试将此列表转换为如上所述的数据结构:

assignments = c()
for (color in levels(df$color)) {
  assignments <- c(color = color, assignments)
}

但这失败了。任何其他人可能能够提供的关于这个问题的帮助将非常感激。

完整代码示例:

library(ggplot2)
library(data.table)

url <- 'https://gist.githubusercontent.com/duhaime/5e06cb7d703dc818f06aa49da67ed13b/raw/1d597e4bf523d925ef3b9873e622c96d7877d347/pop.df'
df <- fread(url)
colnames(df) <- c('vid', 'frame.idx', 'box.idx', 'color', 'percent')

ggplot(df, aes(x=frame.idx, y=percent)) +
  geom_bar(stat='identity', aes(fill='color')) +
  facet_wrap(~vid, ncol=1) +
  guides(fill=FALSE) +
  scale_fill_identity()

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找这样的东西:

ggplot(df, aes(x=frame.idx, y=percent, group=frame.idx, order=box.idx)) +
  geom_col(position="stack", aes(fill=color), size=0) +
  facet_wrap(~vid, ncol=1) +
  guides(fill=FALSE) +
  scale_fill_identity() +
  theme_bw() +
  theme(panel.grid.major.x=element_blank())

enter image description here

我也非常确定你的数据需要一些工作,就像可视化选择一样。

答案 1 :(得分:0)

尝试同时设置names(assignments) <- levels(df$color)

所以你可以编码如下

assignments <- levels(df$color)
names(assignments) <- assignments

或者你目前的做法

assignments = c()
for (color in levels(df$color)) {
  assignments <- c(color, assignments)
}

names(assignments) <- assignments