cómo hacer un (ggplot) diagrama de puntos con diferentes segmentos de color condicionales en dirección

StackOverflow https://stackoverflow.com/questions/1545591

  •  20-09-2019
  •  | 
  •  

Pregunta

Según Shanes excelente solución de otra pregunta, ahora comprendo que no sé cómo hacer esto.

Mi enfoque original era utilizar derretir los datos (gracias de nuevo 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)

Y a continuación, hacer que el terreno:

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"))

Pero no está funcionando (todas las piezas individuales de la línea va hacia "arriba" debe ser de color rojo, todo va "hacia abajo" debe ser verde):

Por cierto: ¿El dispositivo png insisten en geom_point? http://wana.dk/wp-content/uploads/2009/10/damn.png

(bono de la pregunta 1:?. ¿Cómo puedo usar ampliar con sólo el despliegue hacia la derecha (donde mis etiquetas 'a))

(bono de la pregunta 2: Tanto PNG y PDF dispositivo aparece como la de arriba - es decir, con geom_points - esto no sucede en mi pantalla)

Esta es mi datos:

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))
¿Fue útil?

Solución

Su combinación no funcionó, ya que sólo había dos variables de color, sino tres valores de datos. La adición de una tercera variable de color como relleno parece hacer el truco. geom_line toma su color desde el valor anterior del punto de datos, por lo que el último valor de "valor2" no se utiliza.

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"))

Otros consejos

Me gustaría simplemente señalar esta pregunta relacionada. Es una verdadero salto para pasar de esta solución a la solución de su problema particular, pero Quiero poner esto en caso de que podría ayudar.

Con estos datos de ejemplo:

b<-cumsum(rnorm(100))
x<-sample(c(1,2), size=100, replace=TRUE)
t<-1:(length(b))

Aquí x representaría sus valores, b es el color (ascendente / descendente), y t es el eje x. Reformatearla con fusión:

library(ggplot2)
tmp <- melt(data.frame(cbind(t,b,x)),meas=c("x"))
head(tmp)

y el argumento es el siguiente:

ggplot(tmp, aes(x=t,groups=variable)) +
        facet_wrap(~variable) +
        geom_path(aes(y=b,colour=factor(value))) +
        labs(x=NULL) 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top