2015-01-29 2 views
1

EDIT:шестнадцатеричных цветов в ggplot не цветные, как ожидалось

я задал вопрос, который сводится к следующему: «Как я могу получить ggplot использовать шестнадцатеричные цвета»

Ответ MrFick был отличным.

У моего первоначального вопроса была страшная опечатка (читай комментарии). Вместо того, чтобы удалить этот порочный вопрос, я бы рекомендовал просто не читать ничего ниже этого, а затем прочитать принятое решение. Благодарю.

: КОНЕЦ EDIT

Я изобразил несколько geom_segment слоев, чтобы сделать то, что выглядит как вертикальная черта.

p <- p + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="green"), size=10) 
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="blue"), size=10) 
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="red"), size=10) 
p 

Это дает мне:

enter image description here

По какой-то причине, когда я пытаюсь заменить red с "#CC6666", замените green с "#9999CC" и заменить blue с "#66CC99", как таковой,

q <- ggplot() 
q <- q + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="#66CC99"), size=10) 
q <- q + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="#9999CC"), size=10) 
q <- q + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="#CC6666"), size=10) 

Я получаю:

enter image description here

мне как-то нужно сбросить цвета после каждого сюжета делать? И зачем мне это нужно?

(FFIW, я также работаю в Shiny, где я делаю набор из 6 графиков, динамически. Если это проблема, связанная с тем, как цвет определен в среде, у меня может быть дополнительная боль.)

Любая помощь будет оценена по достоинству.

Данные живет here и код здесь:

library(ggplot2) 
library(gridExtra) 

#DF_for_plotting lives here: https://www.dropbox.com/s/6hkc3mth9oimlk5/DF_for_plotting.csv?dl=0 

p <- ggplot() 
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="green"), size=10) 
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="blue"), size=10) 
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="red"), size=10) 

q <- ggplot() 
q <- p + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="#66CC99"), size=10) 
q <- p + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="#9999CC"), size=10) 
q <- p + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="#CC6666"), size=10) 

grid.arrange(p,q, ncol=2) 
+0

В коде 'q' есть опечатка. вы добавляете его в 'p', поэтому вы все равно видите названия цветов. – MrFlick

+0

ooops! Спасибо за улов! Я исправлю это. –

ответ

4

Если вы хотите указать буквенное значение цвета в geom_segment, вы не должны включать его в aes(). Например, используя эти данные испытаний

DF_for_plotting <- data.frame(
    variable=rep("StrpCnCor",4), 
    value=c(0, 50.79330935, 81.127731, 100) 
) 

вы можете сделать

ggplot() + 
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1), colour="green", size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1), colour="blue", size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1), colour="red", size=10) 

enter image description here

или с шестигранными цветами

ggplot() + 
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1), colour="#9999CC", size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1), colour="#66CC99", size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1), colour="#CC6666", size=10) 

enter image description here

хотя, поскольку вы ничего не сопоставляете с эстетикой цвета, никаких легенд не будет.

Когда вы кладете его в aes(), вы не уточняя буквальное значение, вы просто указать буквенное значение, чтобы связать с цветом не имеет значения, если вы используете aes(color="red") или aes(color="determination"); он просто рассматривает это как буквенное значение символа и будет использовать его собственное цветовое небо, чтобы назначить цвет этому значению символа. Вы можете указать свои собственные цвета с scale_fill_manual Например

ggplot() + 
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="a"), , size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="b"), , size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="c"), size=10) + 
    scale_color_manual(values=c(a="green",b="blue",c="red")) 

enter image description here

ggplot() + 
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="a"), , size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="b"), , size=10) + 
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="c"), size=10) + 
    scale_color_manual(values=c(a="#9999CC",b="#66CC99",c="#CC6666")) 

enter image description here

Здесь я назвал три группы "а", "б" и "в", но вы может также назвать «зеленый», «синий», «красный», если хотите, просто кажется странным иметь легенду, которая говорит вам, какой цвет зеленый.

+0

Спасибо за отличный ответ на неверный вопрос. Я удивлен, увидев, что «цвет» не так эстетичен. Мне нужно пойти прочитать книгу Граммер Графика и посмотреть, почему это не так. –

+0

Цвет - это эстетический; это просто имеет иное значение как эстетическое. Последние два сюжета используют 'aes (color =)', это просто не то место, где вы поместили значение цвета. – MrFlick

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