ggplot有两个Y轴

时间:2016-03-04 21:46:25

标签: r plot ggplot2

dataframe:-  df

  Period        v1      v2
1   2002        1       1
2   2003        5       12
3   2004        9       28
4   2005        16      66
5   2006        23      115

Code:-

ggplot() + geom_line(data=df, aes(x=Period, y=v1, group=1, color="v1")) + 
geom_line(data=df, aes(x=Period, y=v2, group=1, color="v2"))+ theme(legend.title=element_blank()) + scale_y_continuous(name="Count") +
geom_point(data=df, aes(x=Period, y=v1, group=1)) + geom_point(data=df, aes(x=Period, y=v2, group=1))

我正在绘制两个线图和点。我遇到的问题是值的增加幅度不同,因此其中一个线图“v1”会在下端缩小。规模因而难以阅读。任何人都可以请求解决这个问题?这段代码也可以缩短吗?

1 个答案:

答案 0 :(得分:1)

ggplot2的想法是将数据转换为所谓的长格式,其中每个观察占据一行:

library(tidyr)
plot_data <- gather(df, key, value, -Period)
head(plot_data)
##   Period key value
## 1   2002  v1     1
## 2   2003  v1     5
## 3   2004  v1     9
## 4   2005  v1    16
## 5   2006  v1    23
## 6   2002  v2     1

现在,您可以将变量value映射到ykey颜色,以便更轻松地获得相同的情节:

ggplot() + geom_line(data=plot_data, aes(x=Period, y=value, colour = key)) + 
  theme(legend.title=element_blank()) + 
  geom_point(data=plot_data, aes(x=Period, y=value)) +
  scale_y_continuous(name="Count")

我不确定数据越来越难以理解你究竟是什么意思。也许,你想要一个对数y轴?

ggplot() + geom_line(data=plot_data, aes(x=Period, y=value, colour = key)) + 
  theme(legend.title=element_blank()) +
  geom_point(data=plot_data, aes(x=Period, y=value)) +
  scale_y_log10(name="Count")

enter image description here