原文恕删。
这边提供另一种解法,使用的是highcharter套件
可以做出不少漂亮的互动图形! :)
完成图可参考:
http://i.imgur.com/7ScoSnl.jpg
(这边借用celestialgod大大的资料)
library(dplyr)
library(highcharter)
numSamples <- 200L
DF <- data.frame(V1 = sample(1L:4L, numSamples, TRUE),
V2 = sample(1L:2L, numSamples, TRUE))
sum0 <- DF %>% group_by(V1) %>% summarise (mean = mean(V2), n = n())
highchart() %>%
hc_xAxis(categories=sum0[["V1"]]) %>%
hc_yAxis_multiples(
list(title=list(text="n")),
list(title=list(text="mean"),opposite=T)
) %>%
hc_add_series(name="n",type="column",
data=sum0[["n"]],
dataLabels=list(enabled=T,color="green")) %>%
hc_add_series(name="mean",type="line",yAxis=1,
data=round(sum0[["mean"]],digits=2),
dataLabels=list(enabled=T)) %>%
hc_exporting(enabled = TRUE)
指定x轴、y轴,然后添加series就搞定了。
(还可以享受鼠标滑来滑去、点来点去有动态效果的成就感XD)
加了hc_exporting()那行,用浏览器开启时就可以把图存成静态图片(JPEG,PNG...)
有一些tricky的地方,个人觉得要花不少时间才能熟悉作者的逻辑
有html或javascript基础应该可以比较快上手
(更别提highcharter套件的help文件非常贫脊...)
不过会发现当放大或缩小图形的时候,图形也会跟着改变!
(应该是因为highchart会自己调整图形为最适合视窗的大小)
例如下图就跟上图长得不太一样(红圈处)
http://i.imgur.com/OFlMgcz.png
也就是说这种double axis的图形
因为要把两种“不能比较”的单位同时放在一张图里,
只要对应的转换公式改变,图形相对位置就有可能改变,造成不同的解读。
我想这应该是Hadley大神坚持不在ggplot2中添加这功能的原因吧~
(要的话自己刻...哈哈)
"Because they are easily manipulated to mislead."
就算是后来的ggplot2新增sec.axis参数,
初衷也只是提供像是华氏摄氏、公里英哩之类,有固定转换公式单位的对照
https://goo.gl/g3LTFw
有兴趣可以去找stackoverflow上那篇讨论,(我推文在前面文章里)
有满多关于double axis plot 适用情境的讨论,
(还可以看Hadley大神跟网友互呛XD)
"I don't understand why you think I should do something that I believe is
wrong just because lots of people think it's a good idea."
总之使用上要特别小心~~~~~