Возможно, ваши примерные данные не соответствуют реальным данным, с которыми вы работаете, но для df2
линии не могут быть нарисованы.Существует только одно значение для каждого значения x и y.Вот модифицированная версия вашего df2
с достаточным количеством точек данных для построения линий:
df <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,2,3,1,2,3))
df2 <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,4,3,5,0,2))
p <- ggplot(df, aes(x=grp, y=val))
p <- p + geom_bar(stat="identity", alpha=0.75)
p + geom_line(data=df2, aes(x=grp, y=val), colour="blue")
В качестве альтернативы, если приведенный выше пример данных верен, вы можете отобразить эту информацию как точку с помощью geom_point(data = df2, aes(x = grp, y = val), colour = "red", size = 6)
.Очевидно, вы можете изменить цвет и размер по своему вкусу.
РЕДАКТИРОВАТЬ: В ответ на комментарий
Я не совсем уверен, что должен выглядеть визуал для многочлена Freq над гистограммойлайк.Должны ли значения x быть связаны друг с другом?Во-вторых, вы продолжаете обращаться к нужным строкам, но ваш код показывает geom_bar()
, что, как я полагаю, не то, что вы хотите?Если вы хотите строки, используйте geom_lines()
.Если два предположения выше верны, то вот подход для этого:
#First let's summarise df2 by group
df3 <- ddply(df2, .(grp), summarise, total = sum(val))
> df3
grp total
1 A 5
2 B 8
3 C 3
#Second, let's plot df3 as a line while treating the grp variable as numeric
p <- ggplot(df, aes(x=grp, y=val))
p <- p + geom_bar(alpha=0.75, stat = "identity")
p + geom_line(data=df3, aes(x=as.numeric(grp), y=total), colour = "red")