como fazer uma (ggplot) linha de enredo com cores diferentes segmentos condicional em direção
Pergunta
Como por Shanes excelente solução em outra pergunta, agora percebo que eu não sei como fazer isso.
Minha abordagem original era usar derreter os dados (obrigado novamente shane):
dm1 <- melt(d[,c("Type","I.alt","idx06","idx07","idx08")], id=c("Type","I.alt"))
dm2 <- melt(d[,c("Type","I.alt","farve1","farve2")], id=c("Type","I.alt"))
colnames(dm2) <- c("Type", "I.alt", "variable2", "value2")
dm <- merge(dm1, dm2)
E, em seguida, fazer o enredo:
ggplot(dm, aes(x=variable,y=value,group=Type,label=Type,size=I.alt))+
geom_line(aes(col=value2))+
geom_text(data=subset(dm, variable=="idx08"),hjust=-0.2, size=2.5)+
theme_bw()+
scale_x_discrete(expand=c(0,1))+
opts(legend.position="none")+
scale_colour_manual(values=c("green","red"))
Mas ele não está funcionando (tudo o que o indivíduo linha de peças de ir "para cima" deve ser vermelho, todos indo para baixo "a" deve ser verde):
BTW:o png dispositivo insistem em geom_point?http://wana.dk/wp-content/uploads/2009/10/damn.png
(pergunta de bônus 1:como posso usar a expandir-se para apenas expandir-se para a direita?(onde minhas etiquetas ' em.))
(pergunta de bônus 2:Tanto png e pdf dispositivo mostra-se como acima - isto é,com geom_points - isso não acontecer na minha tela)
Esta é a minha dados:
d <- structure(list(Type = structure(c(8L, 21L, 23L, 20L, 6L, 14L,
3L, 24L, 2L, 28L, 32L, 22L, 15L, 29L, 1L, 17L, 18L, 33L, 25L,
13L, 30L, 11L, 26L, 9L, 12L, 4L, 5L, 27L, 16L, 19L, 10L, 31L,
7L), .Label = c("Alvorligere vold", "Andre strafferetlige særlove",
"Andre tyverier", "Bedrageri", "Brandstiftelse", "Butikstyverier m.v.",
"Dokumentfalsk", "Færdselslovovertræd. i øvrigt", "Færdselsuheld med spiritus",
"Falsk forklaring i øvrigt", "Forbr. mod off. myndighed m.v.",
"Freds- og ærekrænkelser", "Hæleri", "Hærværk", "Indbrud i bank, forretn. m.v.",
"Indbrud i fritidshuse, garager mv", "Indbrud i villaer, lejligheder mv",
"Love vedr. forsvaret og lign.", "Love vedr. spil, bev., næring",
"Lov om euforiserende stoffer", "Mangler ved køretøj", "Røveri",
"Simpel vold", "Spiritus- og promillekørsel", "Trusler", "Tyv./brugstyv. af andet",
"Tyv./brugstyv. af cykel", "Tyv./brugstyv. af indr. køretøj",
"Tyv/brugstyv. af knallert", "Tyveri fra bil, båd m.v.", "Ulovlig omgang med hittegods",
"Våbenloven", "Vold o.l. mod off. myndighed"), class = "factor"),
I.alt = c(16137L, 9519L, 5930L, 5502L, 4887L, 3582L, 3101L,
1738L, 1660L, 1649L, 1551L, 1412L, 1338L, 1164L, 1154L, 1057L,
931L, 907L, 857L, 724L, 681L, 644L, 641L, 505L, 450L, 419L,
405L, 328L, 324L, 324L, 320L, 281L, 262L), idx06 = c(1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), idx07 = c(0.972675591417568,
0.766866371450899, 0.931743805516597, 0.813047711781889,
0.88728323699422, 0.96420233463035, 0.855743544078362, 1.03710247349823,
0.751470588235294, 0.90443686006826, 0.808403361344538, 0.902834008097166,
0.718181818181818, 0.904555314533623, 1.02717391304348, 0.68957345971564,
1.10324483775811, 0.93030303030303, 0.805309734513274, 0.843003412969283,
0.74914089347079, 0.824786324786325, 1.04060913705584, 1.09150326797386,
0.977941176470588, 0.892405063291139, 0.966666666666667,
0.828125, 0.696, 0.813559322033898, 0.697841726618705, 0.88235294117647,
0.62280701754386), idx08 = c(0.986612873647533, 0.712685595207085,
0.840579710144927, 0.865628042843233, 0.93757225433526, 0.823346303501945,
0.905609973285841, 1.03356890459364, 0.689705882352941, 0.909556313993174,
0.798319327731092, 0.955465587044534, 0.714545454545455,
0.620390455531453, 1.10869565217391, 0.815165876777251, 0.64306784660767,
0.818181818181818, 0.722713864306785, 0.627986348122867,
0.59106529209622, 0.927350427350427, 1.21319796954315, 1.20915032679739,
1.33088235294118, 0.759493670886076, 1.40833333333333, 0.734375,
0.896, 0.932203389830508, 0.60431654676259, 0.872549019607843,
0.675438596491228), farve1 = c("green", "green", "green",
"green", "green", "green", "green", "red", "green", "green",
"green", "green", "green", "green", "red", "green", "red",
"green", "green", "green", "green", "green", "red", "red",
"green", "green", "green", "green", "green", "green", "green",
"green", "green"), farve2 = c("red", "green", "green", "red",
"red", "green", "red", "green", "green", "red", "green",
"red", "green", "green", "red", "red", "green", "green",
"green", "green", "green", "red", "red", "red", "red", "green",
"red", "green", "red", "red", "green", "green", "red")), .Names = c("Type",
"I.alt", "idx06", "idx07", "idx08", "farve1", "farve2"), class = "data.frame", row.names = c(NA, -33L))
Solução
A sua mala não funciona porque você só tinha duas variáveis de cor, mas três valores de dados.Adicionar uma terceira cor variável como preenchimento parece fazer o truque.geom_line leva é a cor do anterior dados do valor e, portanto, o último valor de "valor2" não é usado.
d$farve3<-NA
dm1 <- melt(d[,c("Type","I.alt","idx06","idx07","idx08")], id=c("Type","I.alt"))
dm2 <- melt(d[,c("Type","I.alt","farve1","farve2","farve3")], id=c("Type","I.alt"))
colnames(dm2) <- c("Type", "I.alt", "variable2", "value2")
dm<-cbind(dm1,dm2)
ggplot(dm, aes(x=variable,y=value,group=Type,label=Type,size=I.alt))+
geom_line(aes(col=value2))+
geom_text(data=subset(dm, variable=="idx08"),hjust=-0.2, size=2.5)+
theme_bw()+
scale_x_discrete(expand=c(0,1))+
opts(legend.position="none")+
scale_colour_manual(values=c("green","red"))
Outras dicas
Eu faria apenas Aponte esta questão relacionada. É um verdadeiro salto ir dessa solução para resolver seu problema específico, mas estou postando isso, caso isso possa ajudar.
Com este exemplo de dados:
b<-cumsum(rnorm(100))
x<-sample(c(1,2), size=100, replace=TRUE)
t<-1:(length(b))
Aqui x representaria seus valores, B é a cor (subindo/descendo) e T é o eixo x. Reformate -o com derretimento:
library(ggplot2)
tmp <- melt(data.frame(cbind(t,b,x)),meas=c("x"))
head(tmp)
E plotá -lo:
ggplot(tmp, aes(x=t,groups=variable)) +
facet_wrap(~variable) +
geom_path(aes(y=b,colour=factor(value))) +
labs(x=NULL)