2016-04-07 35 views
0

我有這樣的表:標籤只是其中x被修改的ggplot點的子集

dt <- data.table(titles=c('B','C','A','C'), 
       labs =c('b','c','a','c'), 
       values=c(3, 2, 3, 4)) 

爲了繪製點,而不崩潰,重新排序,我不得不這樣做下面的技巧與ggplot():代替aes(x=titles, y=values)我使用aes(x=seq_len(nrow(dt)), y=values)

ggplot(data = dt, 
     aes(x=seq_len(nrow(dt)), y=values)) + 
    geom_point() + 
    geom_text(aes(label=labs)) + 
    scale_x_discrete(labels=dt$titles) + xlab('titles') 

現在我想還沒有爲所有節點,而只是他們的一個子集標籤(例如,在values>2)。此呼叫不起作用:

ggplot(data = dt, 
     aes(x=seq_len(nrow(dt)), y=values)) + 
    geom_point() + 
    geom_text(data=subset(dt, values>2), aes(label=labs)) + 
    scale_x_discrete(labels=dt$titles) + xlab('titles') 
# Error: Aesthetics must be either length 1 or the same as the data (2): label, x, y 

如何在此例中調用geom_text()

回答

1

我認爲你正在尋找inherit.aes=F選項:

dt2 <- subset(dt, values>2) 
ggplot(data = dt, 
     aes(x=seq_len(nrow(dt)), y=values)) + 
    geom_point() + 
    geom_text(data=dt2, aes(x=values, y=values, label=labs), inherit.aes=F) + 
    scale_x_discrete(labels=dt$titles) + xlab('titles') 
+0

好,'X = values'這裏做了糟糕的工作(我稍微修改'values'在我的例子,以使其可見)。但用'x = which(dt $ values> 2)'它可以正常工作 –