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 关注
- 965 浏览
添加回答
举报