【发布时间】:2017-07-27 20:28:56
【问题描述】:
我有一个关于如何在 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,但它显示了一个
错误:zero_range(范围)
【问题讨论】:
-
您可以从过滤掉所有
-
@Mako212 有一个很好的观点。我不确定在数据可视化中通常使用或推荐具有两个不同范围的刻度的轴。考虑将 y 轴的限制设置为 10% 和 -10%
-
@AlexP 我强烈建议避免在同一张图表上使用不同的轴刻度(假设您正在谈论对红色和蓝色使用不同的范围),因为这表明两者之间存在错误的等效/比较同一图表上的一组值。只需将图表限制在 +/- 10% 就可以了
-
您可以在自定义比例/轴转换stackoverflow.com/questions/38333603/…中使用对数模数转换
L(x) = sign(x) * log(|x| + 1) -
还有!是否可以删除高于 30% 或低于 -30% 的空间?这是一种浪费。