gpt4 book ai didi

r - 使用annotation_logticks或替代方法在轴线外侧显示对数刻度小刻度线

转载 作者:行者123 更新时间:2023-12-03 02:12:15 25 4
gpt4 key购买 nike

annotation_logticks() 是一个很棒的小函数,它向对数刻度轴添加小刻度线,as shown here

默认情况下,该函数在绘图的面板区域内部绘制刻度。例如,如果在 y 轴上,刻度线出现在轴线的右侧;如果在 x 轴上,刻度线出现在轴线上方。

example from ggplot2 website

我发现这个默认值对于大多数绘图情况来说都是不可取的。到目前为止,我还没有找到一种简单的方法来让这些小刻度显示在出现常规 ggplot2 刻度的面板区域的外部。例如,y 轴出现在线条的左侧而不是右侧。有没有一个简单的解决方案?

对于在主要刻度之间插入值很重要的绘图情况,将这些值显示在常规 ggplot2 标签和刻度通常出现的左侧将是一个非常好的选择。我还没有找到一个不涉及剪切或完全放弃annotation_logticks()的解决方案,而且我还没有成功地简单地使用刻度线长度的负值。

这是直接来自 ggplot2 网站示例的代码:

a <- ggplot(msleep, aes(bodywt, brainwt)) +
geom_point(na.rm = TRUE) +
scale_x_log10(
breaks = scales::trans_breaks("log10", function(x) 10^x),
labels = scales::trans_format("log10", scales::math_format(10^.x))
) +
scale_y_log10(
breaks = scales::trans_breaks("log10", function(x) 10^x),
labels = scales::trans_format("log10", scales::math_format(10^.x))
) +
theme_bw()

a + annotation_logticks()

我正在寻找一个简单地将刻度翻转到轴线另一侧的结果。

最佳答案

我找到了一种简洁的方法来解决这个问题,尽管这个解决方案没有与 annotation_logticks() 相同的刻度长度

logticks <- function(datavar,type) {

minimum <- 1/10^abs(floor(log10(min(datavar, na.rm=TRUE))))
maximum <- 1*10^abs(floor(log10(max(datavar, na.rm=TRUE)))+1)
multiple <- floor(log10(maximum/minimum))

yourtickvector <- c()

if (type=="breaks") {

yourtickvector <- c(minimum)

for (x in seq(0,multiple)) {

andadd <- seq(minimum*10^x,minimum*10^(x+1),minimum*10^x)[-1]

yourtickvector <- c(yourtickvector,andadd)

}

} else if (type=="labels") {

for (x in seq(0,multiple)) {

andadd <- c(minimum*10^x,rep("",8))

yourtickvector <- c(yourtickvector,andadd)

}

yourtickvector <- c(yourtickvector,minimum*10^multiple)

}

return(yourtickvector)

}

# only changed the breaks / label fields below to call the above function

a <- ggplot(msleep, aes(bodywt, brainwt)) +
geom_point(na.rm = TRUE) +
scale_x_log10(
breaks = logticks(msleep$bodywt,"breaks"),
labels = logticks(msleep$bodywt,"labels")
) +
scale_y_log10(
breaks = logticks(msleep$brainwt,"breaks"),
labels = logticks(msleep$brainwt,"labels")
) +
theme_bw()

a

enter image description here

关于r - 使用annotation_logticks或替代方法在轴线外侧显示对数刻度小刻度线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54191372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com