2012-08-19 92 views
4

在R中,我繪製了以下直方圖。問題在X軸上。大部分數據落入區間[0,10]。很少有一個X值大於10,儘管最大值是34.如何將軸斷點設置爲軸的一部分?

因此,不是在X軸上一直顯示0,1,2,...直到34,我將顯示0 ,1,2,...,10,15,20,25,30.換句話說,當X> 10時,僅以5的間隔顯示標籤,以便標籤不會重疊。

example figure

這是我的R代碼。如何修改它?

d<-read.table("16_prop_s.tsv", header=T, sep="\t") 
library(ggplot2) 
library(scales) 
ggplot(d, aes(x=factor(NRB))) + 
    geom_histogram(aes(y=(..count..)/sum(..count..))) + 
    scale_y_continuous(labels=percent_format()) + 
    xlab("Rotatable bonds") + opts(axis.title.y = theme_blank()) + 
    opts(axis.title.x = theme_text(size = 24)) + 
    opts(axis.text.x = theme_text(size = 18)) + 
    opts(axis.text.y = theme_text(size = 18)) 
+0

我編輯了標題,以希望使更多的搜索。讓我知道你的想法。 – 2012-08-20 07:13:14

+0

當然,沒關係。 – 2012-08-20 09:17:13

回答

11

使用scale_x_discrete定製遊:

d <- data.frame(NRB = c(abs(round(rnorm(1000, 5, 4))), 1:34)) 
library(ggplot2) 
library(scales) 
p <- ggplot(d, aes(x=factor(NRB))) + 
    geom_histogram(aes(y=(..count..)/sum(..count..))) + 
    scale_y_continuous(labels=percent_format()) + 
    xlab("Rotatable bonds") + opts(axis.title.y = theme_blank()) + 
    opts(axis.title.x = theme_text(size = 24)) + 
    opts(axis.text.x = theme_text(size = 18)) + 
    opts(axis.text.y = theme_text(size = 18)) 

p + scale_x_discrete(breaks = c(1:10, seq(15, 35,5)), 
        labels = c(1:10, seq(15, 35,5))) 

enter code here

如果你想均勻分佈的網格線,但具有相同數量的空使用標籤。

x <- 11:35 
p + scale_x_discrete(breaks = c(1:35)), 
        labels = c(1:10, ifelse(x%%5 == 0, x, ""))) 
4

我喜歡@ lselzer的解決方案,但它可能不是你要找技術上的東西。讀者會得到這樣的印象,即刻度可能在對數刻度上,這可能不是您想要的。您可以像這樣添加具有空值的標籤。

p + scale_x_discrete(breaks = 1:34, 
    labels = c(1:10, "", "", "", "", 15, "", "", "", "", 20, "", "", "", "", 25, "", "", "", "", 30, "", "", "", 34)) 

enter image description here

+0

這就是我的第二個解決方案 – 2012-08-19 19:57:18

+0

@lselzer,對不起,當我閱讀帖子時,它不在那裏。也許我的網頁不同步? – 2012-08-20 07:10:11

+0

也許,當我更新我的答案時,我沒有看到你的。沒問題 ;) – 2012-08-20 14:18:30