R 恢复GG2图中的二次y刻度
我有以下数据框:R 恢复GG2图中的二次y刻度,r,ggplot2,R,Ggplot2,我有以下数据框: observed <- c("1000","2000","3000","4000") simulated <- c("1100","2100","3100","4100") error <- c("-1","-2","-0.5","-4") Date <- c("2013-01-01","2013-01-02","2013-01-03","2013-01-04") y <- data.frame(Date,observed,simulated,er
observed <- c("1000","2000","3000","4000")
simulated <- c("1100","2100","3100","4100")
error <- c("-1","-2","-0.5","-4")
Date <- c("2013-01-01","2013-01-02","2013-01-03","2013-01-04")
y <- data.frame(Date,observed,simulated,error)
y[-1] <- sapply(y[-1], as.character)
y[-1] <- sapply(y[-1], as.numeric)
y$Date <- as.Date(y$Date, format="%Y-%m-%d")
observed您的次轴看起来像这样的原因是因为这就是您转换数据的方式。由于您在第三条几何图形线中将错误
乘以-500
,当错误变小时(即,接近-8
),该线将上升。因此,要使次轴正确映射到您拥有的数据,它必须倒置(顶部为-8
)
如果希望0
位于顶部,只需将错误和秒轴中的trans
公式除以正500
:
ggplot(y, aes(x=Date)) +
geom_line(aes(y=observed, colour = "observed"), size=1.5) +
geom_line(aes(y=simulated, colour = "simulated"), size=1.5) +
geom_line(aes(y=error*500, colour = "error"), size=1.5) +
scale_colour_manual(name="Discharge [m3/sec]",
values = c('observed' = "blue",
'simulated' = "black",
'error' = "red")) +
scale_y_continuous(sec.axis = sec_axis(~./500, name = "Error [%]",
breaks = c(0, -2, -4, -6, -8))) +
labs(y=expression(paste('Q [',m^3~s^-1,']'),
colour = "Parameter")) +
theme(legend.position = c(0.2, 0.87),
legend.title=element_blank(),
axis.title.x=element_blank())
如果要使两个图重叠,可以手动将8添加到error
以将其上移,然后从sec_轴中减去8以保持数字正确:
ggplot(y, aes(x=Date)) +
geom_line(aes(y=observed, colour = "observed"), size=1.5) +
geom_line(aes(y=simulated, colour = "simulated"), size=1.5) +
geom_line(aes(y=(8 + error) * 500, colour = "error"), size=1.5) +
scale_colour_manual(name="Discharge [m3/sec]",
values = c('observed' = "blue",
'simulated' = "black",
'error' = "red")) +
scale_y_continuous(sec.axis = sec_axis(~(. / 500) - 8, name = "Error [%]",
breaks = c(0, -2, -4, -6, -8))) +
labs(y=expression(paste('Q [',m^3~s^-1,']'),
colour = "Parameter")) +
theme(legend.position = c(0.2, 0.87),
legend.title=element_blank(),
axis.title.x=element_blank())
其他提示:
您可以像上面那样使用+
操作符链接多个ggplot
函数,而不是像示例中那样每次将中间结果保存到变量
使用scale\u color\u manual
的正确方法是将命名向量传递给值。这确保了给定的颜色值(即观察到的颜色)始终与正确的颜色(即蓝色
)相关联
如果希望误差线更小、更不占主导地位,只需减小变换因子即可。如果你乘(在geom_线
中)和除(在sec_轴
中)它被100
而不是500
得到一条更平坦的线。你得摆弄一下号码,让它看起来像你想要的。在ggplot2
中,次轴必须是主轴的变换,因此不能只传递它自己的limits=
参数
您只想更改标签或将辅助y轴反转?是的,我想反转辅助y轴,使其从0到-8从上到下尝试将scale\u y\u continuous
替换为scale\u y\u reverse
oh nvm,这也会切换第一个y\u轴,抱歉,更正,我试过了,它反转了两个y刻度。@Tung谢谢!抢手货我以OP的例子为基础,甚至没有考虑检查颜色。我已经修正了。@divibisan如何使y轴上的误差线不那么明显,例如,将辅助y轴从9延伸到-20,使红线不再占主导地位,而是几乎是一条直线?@Matt减小误差线重要性的最佳方法是减少误差乘以的因子。如果你用100
而不是500
乘/除它,你会得到一条更平坦的线。你得把那个数字玩一玩。在ggplot
中,第二个轴必须是第一个轴的变换,因此不能只给它一个不同的limits=
参数。
ggplot(y, aes(x=Date)) +
geom_line(aes(y=observed, colour = "observed"), size=1.5) +
geom_line(aes(y=simulated, colour = "simulated"), size=1.5) +
geom_line(aes(y=(8 + error) * 500, colour = "error"), size=1.5) +
scale_colour_manual(name="Discharge [m3/sec]",
values = c('observed' = "blue",
'simulated' = "black",
'error' = "red")) +
scale_y_continuous(sec.axis = sec_axis(~(. / 500) - 8, name = "Error [%]",
breaks = c(0, -2, -4, -6, -8))) +
labs(y=expression(paste('Q [',m^3~s^-1,']'),
colour = "Parameter")) +
theme(legend.position = c(0.2, 0.87),
legend.title=element_blank(),
axis.title.x=element_blank())