原文恕刪。
這邊提供另一種解法,使用的是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."
總之使用上要特別小心~~~~~