2017-08-29 26 views
1

我想製作一個函數,將標籤添加到現有圖(內置ggplot2)中,並根據數據的X和Y值的比例定位標籤。但是,當我在函數中創建變量h和v時,它們在函數外部不被識別。有沒有解決的辦法?如果你把你使用的數據框的值在ggplot函數中引用存儲的變量

alphabet = data.frame("X"=c(1,2,3), "Y"=c(1,2,3), "Label"=c("A", "B", "C")) 
plot = ggplot(data = alphabet, aes(x = X, y = Y)) + geom_point() 

addLabel = function(d, p, row) { 
    h = max(d$X)*0.5 
    v = max(d$Y)*0.5 

    p = p + geom_text(data=d[row,], aes(x = X+h, y = Y+v, label = Label)) 

    return(p) 
} 

addLabel(alphabet, plot, 1) 

### Returns: 
Error in eval(expr, envir, enclos) : object 'h' not found 
+0

查看'geom_text'。 'plot + geom_text(aes(label =「Label」))' – CPak

+1

或將它們添加到數據集中。例如'd $ h = max(d $ X)* 0.5' – aosmith

回答

1

ggplot總是最好的工作。例如:

addLabel = function(d, p, row) { 
    row_d = d[row, ] 
    row_d$h = max(row_d$X)*0.5 
    row_d$v = max(row_d$Y)*0.5 

    p = p + geom_text(data=row_d, aes(x = X+h, y = Y+v, label = Label)) 

    return(p) 
} 

addLabel(alphabet, plot, 1)