2016-05-14 110 views
0

我想只標記x軸的一些休息。我到目前爲止已經做的是以下幾點:標籤與ggplot2包選擇休息

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)

問題是將以下錯誤消息輸出到控制檯:

「錯誤:breakslabels必須具有相同的長度」

我已經試過像寫一個自己的函數都,休息和標籤幾件事情,但是這也將無法正常工作。

這個問題的解決方案對任何時間數據都是可重現的,這一點非常重要。 這就是爲什麼這個舊帖子Only label selected breaks還沒有解決我的問題。

此外,如果我可以將「正常」數字用於標記而非科學記數法(100000而不是1e + 05等等),那將會非常好。

問候

回答

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" 
+0

嘿, x軸必須是LOG10縮放。我需要這種表示以用於顯示。 將xSeqLabels轉換爲矢量並在末尾與空字符串結合後,矢量如下所示: > xSeqLabels [1]「1000」「2000」「3000」「4000」「5000」「10000」「20000 「」30000「」40000「 [10]」50000「」「」「」「」「」「」「」「」「」「 [19]」「」「 此空字符串必須介於fe 5000和10000.否則xSeqLabels會逐步標記休息點,這意味着6000級別的休息點會標記爲10000. – Tim91

+0

對不起@ Tim91,已更新的答案將每個10的冪次包括空字符串。 – shreyasgm

+0

您做到了! 非常感謝@shreyasgm,它正在運行! – Tim91