3 回答

TA貢獻1848條經驗 獲得超2個贊
現在ggplot2有了輔助軸支持,這在許多(但不是全部)情況下變得容易得多。無需雜項操作。
即使只允許對相同數據進行簡單的線性變換(例如,不同的測量范圍),我們也可以首先手動重新縮放其中一個變量,至少可以從該屬性中獲得更多收益。
library(tidyverse)
max_stones <- max(d1$stones)
max_revenue <- max(d1$revenue)
d2 <- gather(d1, 'var', 'val', stones:revenue) %>%
mutate(val = if_else(var == 'revenue', as.double(val), val / (max_stones / max_revenue)))
ggplot(mapping = aes(clarity, val)) +
geom_bar(aes(fill = cut), filter(d2, var == 'revenue'), stat = 'identity') +
geom_point(data = filter(d2, var == 'stones'), col = 'red') +
facet_grid(~cut) +
scale_y_continuous(sec.axis = sec_axis(trans = ~ . * (max_stones / max_revenue),
name = 'number of stones'),
labels = dollar) +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
axis.text.y = element_text(color = "#4B92DB"),
axis.text.y.right = element_text(color = "red"),
legend.position="bottom") +
ylab('revenue')
它也可以很好地與facet_wrap
:
其他并發癥,例如scales = 'free'
和space = 'free'
也很容易做到。唯一的限制是,對于所有構面,兩個軸之間的關系均相等。

TA貢獻1831條經驗 獲得超9個贊
我認為對于一定范圍的數據集(例如diamonds),它scales = 'free'會起作用,但是我嘗試使用該樣本集來反映我的一些真實世界數據的樣本集,但我無法y-left適當縮放。有什么想法嗎?d1 <- data.table(Group = c(rep("A", 4), rep("B", 4)), xaxis = c("a","b","c","d"), yleft = c(100,90,50,40, 40,35,30,10), yright = c(.2,.08,.02,.02, .25,.1,.03,.02))
- 3 回答
- 0 關注
- 990 瀏覽
添加回答
舉報