我有一个关于如何在ggplot2中转换y轴的问题。我的情节现在有两条线和散点图。对于散点图,我对零周围的区域非常感兴趣。有没有办法扩大0%到5%之间的空间,缩小20%到30%之间的空间? 我试过用 coord_trans(y =" log10") 转换成日志形式。但在这种情况下,我有很多负值,所以如果我想使用sqrt或log,将删除负值。你有什么建议吗?
以下是我的数据点的示例。
df1 = data.frame(y = runif(200,min = -1, max = 1))
df1 = data.frame( x= seq(1:200), y = df1[order(abs(df1$y)),])
ggplot(df1) + geom_point(colour = "black",aes(x,y) ,size = 0.1)
我希望在0%到5%之间留出更多空间,在5%到30%之间留出更少的空间。
我尝试使用trans_new()来转换轴。
eps <- 1e-8
tn <- trans_new("logpeps",
function(x) (x+eps)^(3),
function(y) ((y)^(1/3) ),
domain=c(- Inf, Inf)
)
ggplot(df1)+ geom_point(colour = "black",aes(x,y) ,size = 0.1) +
# xlab("Observations sorted by PD in v3.1") + ylab("Absolute PD difference ") +
# ggtitle("Absolute PD for RiskCalc v4.0 relative to v3.1") +
scale_x_continuous(breaks = seq(0, round(rownum/1000)*1000, by = round(rownum/100)*10)) +
scale_y_continuous(limits = c(-yrange,yrange),breaks = c(-breaksY,breaksY),
sec.axis = sec_axis(~.,breaks = c(-breaksY[2:length(breaksY)],breaksY), labels = scales:: percent
)) +
# geom_line(data = df, aes(x,y[,3], colour = "blue"),size = 1) +
# geom_line(data = ds,aes(xval, yval,colour = "red"),size = 1) +
coord_trans(y = tn) +
scale_color_discrete(name = element_blank())
但是它将绘图压缩到与我想要的中心相反的中心。然后我尝试使用y = y ^ 3,但它显示了ERROR:zero_range(范围)
欣赏!!
答案 0 :(得分:0)
尝试对y值进行立方根变换:
aes(y=yVariable^(1/3))
或使用trans_new()
定义一个新的转换(例如立方根,带有令人满意的断点和标签)。
答案 1 :(得分:0)
一些想法:
你可以像这样删除图的空边:
scale_y_continuous(expand = c(0,0))
如果您想尝试日志转换,请执行以下操作:
scale_y_log10()
如果你想要关注窗口:
scale_y_continuous(limits=c(-.15,.15), expand=c(0,0))
另外,请考虑添加theme_bw()
以获得更清晰的外观