2016-06-28 4 views
2

У меня есть следующий код:R-сложенными сгруппированы barplot с различным заполнением в R

library(ggplot2) 

K <- data.frame(KK=c("30", "30", "30", "30","10", "10", "10", "10"),k=c("10", "8", "5", "2","10", "8", "5", "2"), 
       Precision=c(85.2,87.5,100,100,82.5,83.3,85.2,94.4),  
       Recall=c(73.3,80,100,100,51.4,54.8,61.1,87.9) , 
       Fscore=c(70.8,79.4,100,100,49.1,54.2,62.7,90.3), 
       Accuracy=c(82.2,86.7,100,100,63.3,66.7,73.3,93.3)) 
    df2 <- reshape2::melt(K, 1:2) 

    ggplot(df2, 
    aes(k, value, fill = variable)) + 
    geom_bar(stat = 'identity', position = 'dodge') + 
theme(legend.position = 'top') 

Этот код дает мне следующий сюжет. enter image description here

Однако, я хочу, чтобы получить barplot как этот

enter image description here

Каждое значение к (10,8,5,2) должна быть группа баров и каждый цвет бара метрику , Кроме того, стержень из значения KK 30 должен быть твердым и с KK из 10 литых. Я не знаю, ясно ли это. На моем выходе появляются значения для K30, но отсутствует с K10, объединенным с K30.

+0

первый шаг должен работать с 'dodge' вместо' stack': 'geom_bar (stat = 'identity', position = 'stack')' – kbrunner

+0

Спасибо, kbrunner, я только что обновил его. – Ruser

+0

Возможно, вам нужно создать новую переменную с разницей, например. Precision 1 und Precision 2 при k = 10, а затем уложите их – kbrunner

ответ

3

Вы можете просто добавить два разных слоя к вашему сюжету по одному для каждого значения KK. К сожалению, ggplot не обрабатывает образцы хорошо (или вообще на самом деле), увидеть этот пост: How to add texture to fill colors in ggplot2?

Код для добавления различных слоев для каждого KK значения является:

ggplot() + 
    geom_bar(data=df2[which(df2$KK==10),], aes(k, value, fill = variable),stat = 'identity',position="dodge") + 
    geom_bar(data=df2[which(df2$KK==30),], aes(k, value, fill = variable),stat = 'identity',position="dodge",alpha=0.5) + 
    theme(legend.position = 'top') 

enter image description here

+0

как я могу добавить значения для каждого бара (и типа) вверху? Я попытался использовать geom_text (aes (df2 $ k, df2 $ variable, label = df2 $ value), position = position_dodge (width = 0.9), vjust = 0.9), но появляется следующая ошибка: «Ошибка: Дискретное значение, масштаб". Как я могу это решить? – Ruser

+0

Вы пытаетесь передать 'df2 $ variable' как y-значение, но ваша ось y уже непрерывна (ее основано на' df2 $ value'. Чтобы не получить ошибку, это работает: 'geom_text (aes (df2) $ k, df2 $ value, label = df2 $ value), position = position_dodge (width = 0.9), vjust = 0.9) '. Однако это не даст правильной горизонтальной позиции для меток. Если вы хотите, чтобы это было сложнее и я предлагаю изменить ось x (так что вам не нужно использовать position = "dodge" –

+0

, вы правы, он вставляет метки в середине высокой группы баров. Как мне изменить ось x • Создание нового только для ярлыков? – Ruser

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

  • Нет связанных вопросов^_^