我尝试覆盖 2 个图形,我在 facet 中使用了自由 Y 比例来正确显示数据:
set.seed(123)
df <-data.frame(
var1 = 15000 + c(0, cumsum(runif(49, -10, 10))),
var2 = rnorm(100, 10, 1),
cate= factor(LETTERS[1:4]),
date = seq(as.Date("2002-01-01"), by="1 month", length.out=100))
df$var1[df$cate=="A"]=rnorm(25, 10,1)
ggplot(df, aes(x=date))+
geom_line(data=df, aes(y=var1, color="red"), size=1)+
theme(legend.position="")+
facet_wrap(facets = ~cate, scale="free_y") +
theme(
axis.text.x = element_text(
angle = 45, face = "bold", hjust = 0.85,
color="black", size=11))
ggplot(df, aes(x=date))+
geom_line(data=df, aes(y=var2), size=1, color="blue")+
theme(legend.position="")+
facet_wrap(facets = ~cate, scale="free_y") +
theme(
axis.text.x = element_text(
angle = 45, face = "bold", hjust = 0.85,
color="black", size=11))
我尝试使用第二个轴覆盖两个图形。我使用 facet 使用了一个免费的 Y 比例尺。遗憾的是,我的第一个轴(左侧)无法正确显示数据或变化,因为这个问题(左侧的限制不好)。
我对第二个轴进行了一些调整(相乘)以获得正确的比例。为此,我从 var1 和 var2 中获得了最大值,根据:
https://whatalnk.github.io/r-tips/ggplot2-secondary-y-axis.nb.html
summary(df)
var1 var2 cate date
Min. : 7.642 Min. : 6.962 A:25 Min. :2002-01-01
1st Qu.:11227.279 1st Qu.: 9.170 B:25 1st Qu.:2004-01-24
Median :14994.614 Median : 9.965 C:25 Median :2006-02-15
Mean :11254.102 Mean : 9.888 D:25 Mean :2006-02-14
3rd Qu.:15008.424 3rd Qu.:10.579 3rd Qu.:2008-03-08
Max. :15035.587 Max. :12.367 Max. :2010-04-01
>
ggplot(df, aes(x=date))+
geom_line(data=df, aes(y=var1, color="blue"), size=1)+
geom_line(data=df, aes(y=var2*15035/12.367, color="red"), size=1) +
theme(legend.position="")+
facet_wrap(facets = ~cate, scale="free_y") +
theme(
axis.text.x = element_text(
angle = 45, face = "bold", hjust = 0.85,
color="black", size=11))+
scale_y_continuous(
sec.axis = sec_axis(~ .*12.367/15035, name="var2"))
**编辑:**
如果我不乘,我会得到这个:
ggplot(df, aes(x=date))+
geom_line(data=df, aes(y=var1, color="blue"), size=1)+
geom_line(data=df, aes(y=var2, color="red"), size=1) +
theme(legend.position="")+
facet_wrap(facets = ~cate, scale="free_y") +
theme(
axis.text.x = element_text(
angle = 45, face = "bold", hjust = 0.85,
color="black", size=11))+
scale_y_continuous(
sec.axis = sec_axis(~ ., name="var2"))