2013-04-09 5 views
1

По существу:штабелирования несколько столбцов на geom_bar в ggplot2

  1. Я хочу сделать бар-график, который показывает агрегированного значения двух столбцов таблицы, которые мне удалось сделать с помощью: err.bar <- ggplot(ss.data, aes(x=pop, y=obs+proc)) err.bar <- err.bar + geom_bar(position="stack", stat = "identity") err.bar

  2. Я хочу затенять, не обязательно цвет, две части агрегированных баров.

  3. Наконец, я хочу, чтобы цвет баров, группируя их по видам (то есть, по видовым E & C, как указано на оси Х этикетки на графике Excel)

данных Я используя аналогично:

  • поп-E1 E2 E3 E4 E5 Е6 Е7 C1 C2 C3 C4
  • набл 0,0027 0,0018 0,0464 0,0095 0,0034 0,0117 0,017 0,1178 0,0449 0,039 0,0903
  • прок 0,0319 0,0196 0,0511 0,0143 0,0048 0,0078 0,0396 0,1662 0,074 0,1681 0,1358

ответ

3

Вот решение, которое получает вас больше того, что вы хотите. Но учтите, что ggplot не предназначен для разделения отдельных параметров «тени» и «цвет» на одном участке. Вместо этого я закрасил ваши категории obs и proc, используя серые цвета заливки, и я сгруппировал вид в грани (вместо того, чтобы покрасить их по-разному).

library(ggplot2) 
library(reshape2) 

ss.data = data.frame(
    pop=c("E1", "E2", "E3", "E4", "E5", "E6", "E7", "C1", "C2", "C3", "C4"), 
    obs=c(0.0027, 0.0018, 0.0464, 0.0095, 0.0034, 0.0117, 0.017, 0.1178, 
      0.0449, 0.039, 0.0903), 
    proc=c(0.0319, 0.0196, 0.0511, 0.0143, 0.0048, 0.0078, 0.0396, 0.1662, 
      0.074, 0.1681, 0.1358), stringsAsFactors=FALSE) 

# Add new column 'species' by removing the trailing digits from 'pop'. 
ss.data$species = gsub("\\d", "", ss.data$pop) 

# Convert data to long-form with 'melt' from the reshape2 package. 
mdat = melt(ss.data, id.vars=c("pop", "species"), 
      measure.vars=c("obs", "proc")) 

plot_1 = ggplot(mdat, aes(x=pop, y=value, fill=variable)) + 
     theme_bw() + 
     geom_bar(position="stack", stat="identity") + 
     scale_fill_manual(values=c("grey50", "grey80")) + 
     facet_grid(. ~ species, space="free_x", scales="free_x", 
      labeller=label_both) 

ggsave("plot_1.png", plot=plot_1, width=6.5, height=4) 

enter image description here

+0

Большое спасибо. Я подозревал, что мне нужно использовать расплав, но я не знал, что мне нужно будет сделать так, чтобы две переменные были id. Еще раз спасибо. –

+0

Добро пожаловать. Я рад помочь. – bdemarest

Смежные вопросы