2017-02-06 88 views
1

ENV如何讓色彩平滑地改變R中繪製

[R 3.3.1

迷你數據

rdn<-c(0.8,1.8,2.8) 
tdn<-c(1,2,3,4,5,6,7,8,9) 

idn<-matrix(c(0.3, 0.3, 0.3, 0.2, 0.2, 0.4, 0.1, 0.1, 0.5, 0, 0.2, 0.5, 0, 0.3, 0.6, 0, 0.4, 0.6, 0, 0.4, 0.6, 0, 0.5, 0.7, 0, 0.5, 0.7), nrow=9, ncol=3, byrow=T) 

當我現在有哪些:

密碼

filled.contour(tdn, rdn, idn, 
    color.palette=colorRampPalette(c("blue","yellow","red")), 
    plot.title=title(main="Detail", sub="detail", 
        xlab="t", ylab="lambda"), 
    plot.axes = { axis(side = 1, at = tdn, labels = tdn) 
        axis(side = 2, at = rdn, labels = rdn) }, 
    key.title=title(main="ratio"), 
    key.axes = axis(4, seq(0, 1, by = 0.1))) 

當前結果

enter image description here

問題

顏色範圍是不是我想要的。顏色之間有邊界,所以顏色不會從深藍色變爲深紅色。

預計

enter image description here

問題

如何讓色彩平滑地改變像我Expeced圖中的R打印時?我如何刪除上面的問題?而rainbow也不適合我。謝謝。

編輯

關注Haboryme的解決方案

enter image description here

前景不會消失。

回答

4

關閉@setempler答案,但你可能會發現它有點接近你的預期輸出:

par(fg = NA,col="black") 
filled.contour(x=tdn, 
       y=rdn, 
       z=idn, 
       color.palette=colorRampPalette(c("blue","yellow","red")), 
       plot.title=title(main="Detail", sub="detail", 
           xlab="t", ylab="lambda"), 
       nlevels=200, 
       plot.axes = { axis(side = 1, at = tdn, labels = tdn) 
       axis(side = 2, at = rdn, labels = rdn) }, 
       key.title=title(main="ratio"), 
       key.axes = axis(4, seq(0, 1, by = 0.1))) 

enter image description here

+0

不錯的調整'par'! – setempler

+0

我試過你的解決方案。設置了'fg = NA'和'col =「black」'後,前景不會消失。白線仍然存在。 –

+0

@NickDong真的很令人驚訝。你開始新的R會話後嘗試過嗎? – Haboryme

3

不幸的是,filled.contour ...

  • 修復級別數/劇情和鑰匙之間的顏色,使之與nlevels參數試驗(和col代替color.palette)在一個奇怪的輸出結果(平滑的圖像,但不可讀的鑰匙)。

  • 此外,輪廓線不能修改。因此,增加到200個等級(從您的示例中的最初14個)仍然是「可讀的」,但是較高的值會產生不需要的副作用。

實施例:

n <- 200 
filled.contour(tdn, rdn, idn, 
       col=colorRampPalette(c("blue","yellow","red"))(n), 
       levels = seq(0,1,length.out = n), 
       plot.title=title(main="Detail", sub="detail", 
           xlab="t", ylab="lambda"), 
       plot.axes = { axis(side = 1, at = tdn, labels = tdn) 
        axis(side = 2, at = rdn, labels = rdn) }, 
       key.title=title(main="ratio"), 
       key.axes = axis(4, seq(0, 1, by = 0.1))) 

輸出:

enter image description here

lattice::levelplot也許嘗試解決該問題。至少對於圖例顏色按鍵,更高級別的數字不會打擾。但圖像不「平滑」。

例子:

library(lattice) 
levelplot(idn, row.values = tdn, column.values = rdn, cuts = n, col.regions = colorRampPalette(c("blue","yellow","red"))(n)) 

輸出:

enter image description here

+0

那麼在R中實現預期的繪圖是不可能的?預期的數字是由'matlab'還是'origin'或其他語言工具繪製的? –

+0

也許事先用'spatstat :: blur'或其他方法來平滑矩陣是可能的。 – setempler