我试图标记x轴的一些中断。到目前为止我所做的是以下内容:
data <- data.frame(time = c(13, 25, 78, 130), event = 1)
roundDown <- function(x) 10 ^ trunc(log10(x))
xSeqBreaks <- sapply(log10(roundDown(min(data$time))):log10(roundDown(max(data$time))), function(x)(seq(10 ^ x, 10 ^ (x + 1), 10 ^ x)))
xSeqLabels <- sapply(log10(roundDown(min(data$time))):log10(roundDown(max(data$time))), function(x)(seq(10 ^ x, 5 * 10 ^ x, 10 ^ x)))
# ... calling ggplot(..)
scale_x_log10(breaks = xSeqBreaks, labels = xSeqLabels, expand = c(.05, .1)) +
# ... some other ggplot functions
xSeqBreaks给了我一个矩阵,它打破了x轴,使得在每个十进制功率范围之间有10行。例如,我的数据时间的最小值是13,最大时间是130,我会在c(10,20,30,40,50,60,70,80,90,100,200,300,400,500 ,600,700,800,900,1000)。
xSeqLabels生成一个矩阵,该矩阵应标记x轴,使得在每个十进制范围内仅标记前5行。继续上面的例子我希望标签在c(10,20,30,40,50,100,200,300,400,500)
问题是以下错误消息打印到控制台:
&#34;错误:breaks
和labels
的长度必须相同&#34;
我尝试过几种方法,例如为两者,断点和标签编写自己的功能,但这也不会起作用。
对于任何类型的时间数据,此问题的解决方案都是可重复的,这一点非常重要。 这就是为什么这篇较早的帖子Only label selected breaks没有解决我的问题。
此外,如果我可以使用&#34;普通&#34;那将是非常好的。用于标记的数字而不是科学记数法(100000而不是1e + 05等)。
祝你好运
蒂姆答案 0 :(得分:0)
对之前误解了您的问题表示歉意。以下是您正在寻找的内容:
xSeqBreaks <- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000)
//Replace the last 4 labels for every power of 10 with empty strings
xSeqLabels <- xSeqBreaks
xSeqLabels[c(rep(F,5),rep(T,4))] <- ''
给出了:
> xSeqBreaks
[1] 10 20 30 40 50 60 70 80 90 100 200 300 400
[14] 500 600 700 800 900 1000
> xSeqLabels
[1] "10" "20" "30" "40" "50" "" "" "" ""
[10] "100" "200" "300" "400" "500" "" "" "" ""
[19] "1000"