2013-08-27 4 views
0

У меня нет большого опыта работы в R, и мне интересно, могут ли они помочь мне в этой ситуации.R программирование - создание графика с переменными цветами

У меня есть следующая матрица:

mat <- matrix(c(0,0.5,0.2,0.23,0.6,0,0,0.4, 
     0.56,0.37,0,0.32,0.4,0.99,0.54,0.6,0,0.39), ncol=6, nrow=3) 

dimnames(mat) = list( 
        c("y1","y2","y3"), 
        c("day1","day2","day3","day4","day5","day6") 
        ) 

> mat 
    day1 day2 day3 day4 day5 day6 
y1 0.0 0.23 0.00 0.37 0.40 0.60 
y2 0.5 0.60 0.40 0.00 0.99 0.00 
y3 0.2 0.00 0.56 0.32 0.54 0.39 
> 

Я хочу знать, как я могу получить график, где точки будут отмечены на основе матрицы.

Значения произвольны в интервале [0,1]. Можно изменить цвет сгенерированных точек как набор ограничений?

Пример:

  • (0,0.2] - Красный
  • (0.2,0.4] - зеленый
  • (0.4,0.6] - Желтый
  • (0.6,0.9] - Синий
  • (0.9,1]. - Черный

Я прошу прощения, если я не объяснил себя хорошо

Спасибо!

ответ

0

Если вы хотите просто цветные точки, то, как это будет делать:

palette(c("red","green","yellow","blue","black")) 
plot.default(
    as.data.frame.table(t(mat))[1:2], 
    col=findInterval(t(mat),c(0,0.2,0.4,0.6,0.9)), 
    pch=19, 
    axes=FALSE,ann=FALSE, 
    panel.first=grid() 
) 
axis(2,at=1:length(rownames(mat)),labels=rownames(mat),lwd=0,lwd.ticks=1,las=1) 
axis(1,at=1:length(colnames(mat)),labels=colnames(mat),lwd=0,lwd.ticks=1) 
box() 
palette("default") 

Результат:

enter image description here

1

Предполагая, что ваш диапазон желтый должен быть [0.4,0.6] (в противном случае вы не указали цвет для (0.4,0.5) - вам нужно, даже если ваши данные не требуют)

image(mat,col=c("red","green","yellow","blue","black"),breaks=c(0,0.2,0.4,0.6,0.9,1)) 

Я проигнорировал проблему конечной точки интервала.

+0

Поскольку OP не выяснены Далее, 'image' сюжет кажется наиболее разумным с учетом данных и их ответ на ответ по @Marius – thelatemail

0

Чтобы назначить цвета для разных интервалов, вы можете разбить свои значения на группы, используя cut. Как и другие говорили, что это немного непонятно, что делать с точками на границах, поэтому я поставил include.lower в TRUE:

library(reshape2) 
df = melt(mat) 
colnames(df)[1:2] = c('year', 'day') 
df$value_groups = cut(df$value, breaks=c(0,0.2,0.4,0.6,0.9,1), include.lower=TRUE) 

library(ggplot2) 
ggplot(df, aes(x=day, y=value, colour=value_groups, shape=year)) + 
    geom_point(size=3) 

Результат:

enter image description here

0

Вот как я бы делают это с помощью решетки:

library(reshape2) 
library(lattice) 

mmat <- melt(mat) # reshaping the data 

# note that zero isn't included in the interval 
    mmat$colors <- cut(mmat$value, breaks=seq(0, 1, 0.2), include.lower=TRUE) # stealing from Marius 


xyplot(value ~ Var2 | Var1, mmat, groups = colors, 
    par.settings = list(superpose.symbol = 
    list(col = c('red', 'green', 'yellow', 'blue', 'black'))))