我在 log="y" 图的理想刻度线结构>本文,图 3b 3c 3d。
它具有不带标签的短的、对数间隔的小刻度线,以及带标签的长的、对数间隔的主刻度线。
有谁知道如何在 R 中实现这一点?
I saw the ideal tick-mark structure for a log="y" plot in this paper, Figure 3b 3c 3d.
log="y"
It has short, log-spaced minor tick marks without labels, plus long, log-spaced major tick marks with labels.
Does anyone know how to achieve this in R?
R
在基础 R 中,只需构建您想要的轴即可。像这样的事情可能是一个开始。
set.seed(5) d <- data.frame(x=1:100, y=rlnorm(100, meanlog=5, sdlog=3)) with(d, { plot(x, y, log="y", yaxt="n") y1 <- floor(log10(range(y))) pow <- seq(y1[1], y1[2]+1) ticksat <- as.vector(sapply(pow, function(p) (1:10)*10^p)) axis(2, 10^pow) axis(2, ticksat, labels=NA, tcl=-0.25, lwd=0, lwd.ticks=1) })
在lattice中,latticeExtra包具有以下功能:
lattice
latticeExtra
library(lattice) library(latticeExtra) xyplot(y~x, data=d, scales=list(y=list(log=10)), yscale.components=yscale.components.log10ticks)
In base R just build the axes however you want. Something like this could be a start.
In lattice, the latticeExtra package has the capability:
对于 ggplot2 来说,指定刻度的唯一选项似乎是大小(即宽度)。
# A plot of any old data dfr <- data.frame(x = 1:100, y = rlnorm(100)) p <- ggplot(dfr, aes(x, y)) + geom_point() + scale_y_log10(breaks = breaks, labels = breaks) #Tick locations get_breaks <- function(x) { lo <- floor(log10(min(x, na.rm = TRUE))) hi <- ceiling(log10(max(x, na.rm = TRUE))) as.vector(10 ^ (lo:hi) %o% 1:9) } breaks <- get_breaks(dfr$y) log10_breaks <- log10(breaks) #Some bigger ticks p + opts(axis.ticks = theme_segment( size = ifelse(log10_breaks == floor(log10_breaks), 2, 1) ))
For ggplot2, it seems that the only option you have for specifying ticks is the size (i.e., width).
ggplot2
size
这是在 package::sfsmisc 中完成的。请参阅帮助中的示例(axTexpr)
This has been done in package::sfsmisc. See the example in help(axTexpr)
这是一个 ggplot2 解决方案:
library(ggplot2) set.seed(20180407) df = data.frame(x = seq(from = 1, by = 1, length.out = 20), y = 2^(seq(to = 1, by = -1, length.out = 20) + rnorm(20, 0, 0.7))) ggplot(data = df, aes(x = x, y = y)) + geom_line() + scale_y_log10() + annotation_logticks(sides = "l")
您可以通过某些主题使其看起来比链接到的论文更丰富:
ggplot(data = df, aes(x = x, y = y)) + geom_line(colour = "blue") + geom_point(colour = "blue") + scale_y_log10() + annotation_logticks(sides = "l") + theme_minimal() + theme(panel.grid = element_blank(), axis.line = element_line(), axis.ticks.x = element_line())
< /a>
Here is a ggplot2 solution:
You can make it look even more than the paper you linked to with some theming:
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(4)
在基础 R 中,只需构建您想要的轴即可。像这样的事情可能是一个开始。
在
lattice
中,latticeExtra
包具有以下功能:In base R just build the axes however you want. Something like this could be a start.
In
lattice
, thelatticeExtra
package has the capability:对于 ggplot2 来说,指定刻度的唯一选项似乎是大小(即宽度)。
For
ggplot2
, it seems that the only option you have for specifying ticks is thesize
(i.e., width).这是在 package::sfsmisc 中完成的。请参阅帮助中的示例(axTexpr)
This has been done in package::sfsmisc. See the example in help(axTexpr)
这是一个 ggplot2 解决方案:
您可以通过某些主题使其看起来比链接到的论文更丰富:
< /a>
Here is a
ggplot2
solution:You can make it look even more than the paper you linked to with some theming: