2017-01-07 136 views
5

我已在R中創建了折線圖(繪圖),並在每個數據點上標註了標籤。由於數據點數量衆多,標籤會非常全面。我只想爲最後的N個(比如4個)數據點應用標籤。我試過子集geom_label_repel功能,但無法找到他們我們或得到一個錯誤消息。我的數據集由99個值組成,分佈在3個組(KPI)上。R ggplot:僅將標籤應用於繪圖中的最後N個數據點

我在R上的下面的代碼:

library(ggplot) 
library(ggrepel) 

data.trend <- read.csv(file=....) 

plot.line <- ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 

    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 


    # Labels defined here 
    geom_label_repel(
    aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
    box.padding = unit(0.35, "lines"), 
    point.padding = unit(0.4, "lines"), 
    segment.color = 'grey50', 
    show.legend = FALSE 
) 

); 

我平心而論,我是很新的R.也許我錯過了一些基本的東西。

在此先感謝。

+1

請提供一個可重現的例子或至少顯示結果圖。 –

回答

6

簡單的方法geom_label_repel設置data =參數只包含想要標記點。

這裏有一個重複的例子:

set.seed(1235) 
data.trend <- data.frame(Version = rnorm(25), Value = rnorm(25), 
         group = sample(1:2,25,T), 
         KPI = sample(1:2,25,T)) 

ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 
    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 
    geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
    data = tail(data.trend, 4),     
    box.padding = unit(0.35, "lines"), 
    point.padding = unit(0.4, "lines"), 
    segment.color = 'grey50', 
    show.legend = FALSE) 

enter image description here

不幸的是,這與排斥算法稍微打亂,使得標籤位置欠佳相對於未標示的其他點(你可以看到在上圖中有些點被標籤覆蓋)。

所以,更好的方法是使用colorfill簡單地進行不必要的標籤不可見(通過設置顏色和填寫NA你想隱藏標籤):

ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 
    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 
    geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
        box.padding = unit(0.35, "lines"), 
        point.padding = unit(0.4, "lines"), 
        show.legend = FALSE, 
        color = c(rep(NA,21), rep('grey50',4)), 
        fill = c(rep(NA,21), rep('lightblue',4))) 

enter image description here

+0

謝謝,你把我放在正確的方向。但是,我看到只顯示了1行的最後數據點。爲了克服這個問題,我添加了一個列表,其中包含我想繪製的版本,並在數據字段中使用子集來僅顯示它們。這確實混合了排斥功能,但對我來說這沒有問題。非常感謝! '標籤< - 尾(data.trend $版,3) ..... geom_label_repel( 數據=子集(data.trend,以%標籤data.trend $版%), AES(版,值,填充=因子(KPI),標籤= sprintf('%0.1f %%'值)), ... )' – user32556