2012-11-09 65 views
0

我正在處理一個數據集,其中有一些變量,我經常用特定的命名約定來顯示CSV文件。因此,例如,我會碰到這樣的:在ggplot2中添加動態x和y標題

p <- ggplot(plot_df, aes(x=ms, y=bandwidth)) + geom_line() 

,默認情況下,圖的X和Y冠軍將分別出來「MS」和「帶寬」。我希望能夠做的就是定義一個擁有這些映射像列表的功能:

"bandwidth"->"Bandwidth (GB/s)" 
"ms"->"Time (ms)" 

,所以我可以養活p到將基本執行一個功能:

p + xlab("Time (ms)") + ylab("Bandwidth GB/s") 

自動無需我不得不指定標籤應該是什麼。爲了做到這一點,我需要以某種方式訪問​​x和y標題作爲一個字符串。我很難弄清楚如何從p中獲得這些信息。

編輯: 我想通常y軸出現爲'價值',因爲融化,但爲了論證的緣故,讓我們只是說我現在做x軸。

回答

6

它們存儲在p$mapping(看str(p)

除非你想要做的事與字符串操作真正看中的,一看錶可能是變量名和正確的標籤

之間轉換的最佳選擇

d <- data.frame(x = 1:5, z = 12) 

p <- ggplot(d, aes(x=x, y = z)) + geom_point() 

labels.list <- list('x' = 'X (ms)', 'z' = 'Hello something') 

p + xlab(labels.list[[as.character(p$mapping$x)]]) + 
    ylab(labels.list[[as.character(p$mapping$y)]]) 

enter image description here

你湊ld把它寫成函數

label_nice <- function(ggplotobj, lookup) { 
    .stuff <- lapply(ggplotobj$mapping, as.character) 
    nice <- setNames(lookup[unlist(.stuff)], names(.stuff)) 
    labs(nice) 
} 
# this will give you the same plot as above 
p + label_nice(p, labels.list) 
+0

不錯,就是我在找的東西。我曾經看過str(p),試圖看看我能否找到它,但我想我錯過了它。謝謝。 – KarateSnowMachine

+0

我不知道如果你有一些變量映射到x或y(在不同的層),這個函數會受到什麼影響。 – mnel

+0

我認爲查找表就足夠了我的目的。目前我已經把它作爲一個switch語句,但同樣的想法。我的情節不是那麼複雜,所以應該可以正常工作。當我更改顯示的輸出變量時,我不得不手動更新標籤 – KarateSnowMachine