2014-02-25 37 views
0

我在R中用geom_tile製作了一個熱圖。除了如何將諸如「d」之類的字符串更改爲0.0的標籤之外,我已經計算出了所有內容。檢測)。用R中的geom_text中的字符串替換舍入爲0.0的標籤R

相關部分是:

+ geom_text(data=subset(MELTEDL3, value !=0),aes(fill=value,label=format(round(value*100, 1), nsmall = 1)), size=3) 

哪個抓住一切從MELTEDL3是不是零值。接下來,對於標籤,值被乘以100,並且標籤顯示爲1個小數,即使這些值舍入到例如1。 「30」(相反,「30.0」)。事情是,一些值小於0.1並顯示爲0.0。通過指定一個不同的子集很容易擺脫它們,但是,我想包括觀察結果,只不是「0.0」而是「d」。

編輯。 例如:

L3.txt 
Taxon A30 A29 A20 
ABCD 0.001 0.0004 0 
DADD 0 0.04 0.000001 
GHKJ 0 0.07 0 

L3 <- read.table('L3.txt', header=T) 
MELTEDL3 <- melt(L3, id=c("Taxon")) 
L3PLOT <- ggplot(MELTEDL3, aes(Taxon, variable)) + geom_tile(aes(fill=value, colour=value)) + scale_y_discrete(expand=c(0,0),limits=c("ABCD","DADD","GHKJ")) + scale_x_discrete(expand=c(0,0)) + scale_fill_gradient2(low="white",mid=muted("blue"),high="red", space="rgb", midpoint=0.5) + geom_text(data=subset(MELTEDL3, value!=0),aes(fill=value,label=format(round(value*100,1),nsmall=1)),size=3) 
+2

請提供一個可重現的例子。 –

回答

1

有點hackish的,但這個工程:

geom_text(
    data=subset(MELTEDL3, value != 0), 
    aes(
    fill=value, 
    label=ifelse((fmt <- format(round(value*100,1), nsmall=1)) == "0.0", "d", as.character(fmt)) 
), 
    size=3 
) 

清潔是定義你自己的format功能,它包裝這樣的邏輯,但基本上是同樣的事情。

+0

非常感謝。無論出於何種原因,這都不起作用。然而,現在知道這個語法,我就可以像這樣工作:######### geom_text(data = subset(MELTEDL3,value!= 0),aes(fill = value,label = ifelse( (round(value * 100,1)<「0.1」),「d」,格式(round(value * 100,1),nsmall = 1))),size = 3)#########遺憾的是缺少換行符,不知道爲什麼增加兩個空格或
對我沒有幫助。 – 5heikki