r - 一个图表中的条形图和线图,在 ggplot2 下带有图例

标签 r ggplot2

我想在带有图例的同一张图表上放置两个独立但相关系列的条形图和线图(条形图表示季度增长,线图表示年度增长)。

我目前使用宽格式的 data.frame 和代码如下:

p <- ggplot() +
    geom_bar(df, aes(x=Date, y=quarterly), colour='blue') +
    geom_line(df, aes(x=Date, y=annual), colour='red')

但我不知道如何添加图例,图例中有一条标有“年度增长”的红线;和一个标有“季度增长”的蓝色方 block 。

或者,我不知道如何使用长格式 data.frame 为不同的系列设置不同的 geom。

更新:

下面的示例代码让我了解了解决方案的一部分,但有一个非常难看的重复图例。仍在寻找一个完整的解决方案......这种方法是基于将数据放在长格式中,然后绘制数据的子集......

library(ggplot2)
library(reshape)
library(plyr)
library(scales)

### --- make a fake data set
x <- rep(as.Date('2012-01-01'), 24) + (1:24)*30
ybar <- 1:24
yline <- ybar + 1

df <- data.frame(x=x, ybar=ybar, yline=yline)
molten <- melt(df, id.vars='x', measure.vars=c('ybar', 'yline'))
molten$line <- ifelse(molten$variable=='yline', TRUE, FALSE)
molten$bar <- ifelse(molten$variable=='ybar', TRUE, FALSE)

### --- subset the data set
df.line  <- subset(molten, line==TRUE)
df.bar   <- subset(molten, bar==TRUE)

### --- plot it
p <- ggplot() +
geom_bar(data=df.bar, mapping=aes(x=x, y=value, fill=variable, colour=variable),
    stat='identity', position='dodge') +
geom_line(data=df.line, mapping=aes(x=x, y=value, colour=variable)) +

opts(title="Test Plot", legend.position="right") 

ggsave(p, width=5, height=3, filename='plot.png', dpi=150)

还有一个示例图......

enter image description here

最佳答案

通过使用 geoms 的 subset 参数。

> x=1:10;df=data.frame(x=x,y=x+1,z=x+2)
> ggplot(melt(df),
    aes(x,value,color=variable,fill=variable))+
  geom_bar(subset=.(variable=="y"),stat="identity")+
  geom_line(subset=.(variable=="z"))

enter image description here

关于r - 一个图表中的条形图和线图,在 ggplot2 下带有图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302070/

相关文章:

r - 每行增加(或不增加)一列的内容

r - lmer(来自 R 包 lme4)如何计算对数似然?

r - 更改 ggplot 方面的因素顺序

r - 更改 xlim 会自动更改 geom_density 的 ylim

r - 将文本值放置在桑基图右侧

r - 本地运行的应用程序在部署到 Shinyapps 服务器时遇到错误

r - 在数据框中保留两个以上的值

r - 如何用文本和上标ggplot2编写x轴标题

r - ggplot2 直方图显示按 bin 而不是计数分组的比例

r - 如何创建自定义 ggplot2 平滑统计(不仅仅是自定义 lm 或 glm 模型)