2017-02-06 1 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 не работает для меня. Благодарю.

EDIT

решение Follow 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

Возможно сглаживание матрицы заранее с помощью чего-то вроде 'spartstat :: blur' или других методов. – setempler

Смежные вопросы