2017-02-06 2 views
2

Мне нужна помощь в назначении правильных шестнадцатеричных цветовых кодов ggplot + geom_tile() для матрицы 86x86. Это корреляционная матрица, и я хочу ее раскрасить в зависимости от ее значения и класса, генерируемого кластерами kmeans. Существует шесть разных кластеров/цветов. Вот псевдокод:Присвоить определенные цвета ячейкам geom_tile заданному вектору шестнадцатеричного цветового кода

value[i,j] < 0.7, color '#FBB4AE' 
value[i] == value[j] then color it according to its cluster value from kmeans 
else: color '#FED9A6' 

Вот фрагмент данных (11x6):

1 1.000000000 0.39444675 0.71206533 0.45434411 0.39223227 0.450000000 
2 0.394446746 1.00000000 0.67660082 0.52710164 0.48768778 0.457329560 
3 0.712065332 0.67660082 1.00000000 0.66864785 0.52839595 0.641500299 
4 0.454344111 0.52710164 0.66864785 1.00000000 0.52414242 0.356348323 
5 0.392232270 0.48768778 0.52839595 0.52414242 1.00000000 -0.147087101 
6 0.450000000 0.45732956 0.64150030 0.35634832 -0.14708710 1.000000000 
7 0.511111111 0.35252487 0.64150030 0.84632727 0.27238352 0.490740741 
8 0.064888568 0.26429707 -0.01560976 0.08671100 -0.07953560 0.243332132 
9 0.307350428 0.40105559 0.52720311 0.80357143 0.38000325 0.356348323 
10 0.509636861 0.25374774 0.44294040 0.19771865 -0.04836194 0.630196118 
11 0.394557570 0.21145645 0.07909650 0.52724973 0.22568906 -0.027399831 

У меня есть отдельный (7396x1) вектор с именем flavors.color, который включает в шестигранном цветовые коды, соответствующие каждый элемент матрицы 86х86. Эти цветовые коды основаны на условии, указанном выше. Верхняя часть представляет собой таблицу вхождений каждого элемента. #CCCCCC является наиболее частым.

color

После плавления:

p<-ggplot(data=corr.melt,aes(Var1,Var2)) + geom_tile(aes(fill=flavors.color),color="white") 
p+ scale_fill_manual(values = unique(flavors.color)) 

#CCCCCC является 'серым', однако в моем участке окрашивает его фиолетовый. Я определил свои цвета с brewer.pal(6,"Set2") и вручную добавил еще два цвета, #CCCCCC и #FFFFCC. В Set2 фиолетовый находится в четвертом положении. Итак, «серый», «белый» и «фиолетовый» смешиваются, и я не знаю, почему. Вот фотография результата.

plot

ответ

1

Вы можете сделать это путем создания 86x86 сетки.

x <- seq(1,86) 
y <- seq(1,86) 
yxs <- expand.grid(x,y) 
yxs$flavors.color <- flavors.color 
ggplot(yxs,aes(x=Var1,y=Var2))+geom_tile(aes(fill=flavors.color)) 
+0

спасибо за ваше предложение, я попробовал его, и шестнадцатеричные цветовые коды не отображаются правильно. они, похоже, не соблюдают цветовую схему по умолчанию ggplot. например, шестнадцатеричный код # F2F2F2 (белый) отображается как «зеленый». –

+0

@SpencerTrinh добавление scale_fill_manual (values ​​= unique (flavors.color)) должно исправить его. – tatxif

+0

Отлично, он почти работает! Тем не менее, окраска по-прежнему отключена по какой-то странной причине. Я обновлю вопрос, чтобы вы могли видеть, что я имею в виду –

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