ggtitle - Más de seis formas en ggplot.
ggplot title size (2)
Para mí, la clave del mensaje de error sobre las 6 formas es la parte que dice: Consider specifying shapes manually.
.
Si agrega los values
en scale_shape_manual
, creo que obtendrá lo que desea. Hice sn
un factor en el conjunto de datos primero.
df$sn = factor(df$sn)
ggplot(df, aes(x = t, y = y, group = sn, color = sn, shape = sn)) +
geom_point() +
geom_line() +
scale_shape_manual(values = 0:10)
Voy al http://www.cookbook-r.com/Graphs/Shapes_and_line_types/ cuando necesito recordar qué números corresponden a qué formas.
Editar El ejemplo anterior muestra cómo agregar 11 símbolos, la misma cantidad de símbolos en su conjunto de datos de ejemplo. Sus comentarios indican que tiene muchos más valores únicos para la variable sn
que en su ejemplo. Tenga cuidado al usar una larga serie de números en los values
, ya que no todos los números se definen como símbolos.
Ignorando si es una buena idea tener tantas formas en un solo gráfico o no, puede usar letras y números, así como símbolos como formas. Entonces, si quisiera, digamos, 73 formas únicas basadas en un factor con 73 niveles, podría usar 19 símbolos, todas las letras mayúsculas y minúsculas, y los números 0 y 1 como values
.
scale_shape_manual(values = c(0:18, letters, LETTERS, "0", "1"))
Me gustaría trazar líneas con diferentes formas con más de seis conjuntos de datos, utilizando colores discretos. Los problemas son: 1) se genera una leyenda diferente para el color y la forma de la línea, pero debe ser solo una leyenda con el color y la forma de la línea, 2) al corregir el título de la leyenda del color de la línea, el color desaparece.
t=seq(0,360,20)
for (ip in seq(0,10)) {
if (ip==0) {
df<-data.frame(t=t,y=sin(t*pi/180)+ip/2,sn=ip+100)
} else {
tdf<-data.frame(t=t,y=sin(t*pi/180)+ip/2,sn=ip+100)
df<-rbind(df,tdf)
}
}
head(df)
# No plot
# Error: A continuous variable can not be mapped to shape
gp <- ggplot(df,aes(x=t,y=y,group=sn,color=sn,shape=sn))
gp <- gp + labs(title = "Demo more than 6 shapes", x="Theat (deg)", y="Magnitude")
gp <- gp + geom_line() + geom_point()
print(gp)
# No plot
# Error: A continuous variable can not be mapped to shape (doesn''t like integers)
gp <- ggplot(df,aes(x=t,y=y,group=sn,color=sn,shape=as.integer(sn)))
gp <- gp + labs(title = "Demo more than 6 shapes", x="Theat (deg)", y="Magnitude")
gp <- gp + geom_line() + geom_point()
print(gp)
# Gives warning about 6 shapes, and only shows 6 shapes, continous sn colors
gp <- ggplot(df,aes(x=t,y=y,group=sn,color=sn,shape=as.factor(sn)))
gp <- gp + labs(title = "Only shows six shapes, and two legends, need discrete colors",
x="Theat (deg)", y="Magnitude")
gp <- gp + geom_line() + geom_point()
print(gp)
# This is close to what is desired, but correct legend title and combine legends
gp <- ggplot(df,aes(x=t,y=y,group=sn,color=as.factor(sn),shape=as.factor(sn %% 6)))
gp <- gp + labs(title = "Need to combine legends and correct legend title", x="Theat (deg)", y="Magnitude")
gp <- gp + geom_line() + geom_point()
print(gp)
# Correct legend title, but now the line color disappears
gp <- ggplot(df,aes(x=t,y=y,group=sn,color=as.factor(sn),shape=as.factor(sn %% 6)))
gp <- gp + labs(title = "Color disappeard, but legend title changed", x="Theat (deg)", y="Magnitude")
gp <- gp + geom_line() + geom_point()
gp <- gp + scale_color_manual("SN",values=as.factor(df$sn))
print(gp)
# Add color and shape in geom_line / geom_point commands,
gp <- ggplot(df,aes(x=t,y=y,group=sn))
gp <- gp + labs(title = "This is close, but legend symbols are wrong", x="Theat (deg)", y="Magnitude")
gp <- gp + geom_line(aes(color=as.factor(df$sn)))
gp <- gp + geom_point(color=as.factor(df$sn),shape=as.factor(df$sn %% 6))
gp <- gp + scale_color_manual("SN",values=as.factor(df$sn))
print(gp)
Primero, sería más fácil convertir sn
a un factor.
df$sn <- factor(df$sn)
Luego, debe usar scale_shape_manual
para especificar sus formas a usar.
gp <- ggplot(df,aes(x=t, y=y, group=sn,color=sn, shape=sn)) +
scale_shape_manual(values=1:nlevels(df$sn)) +
labs(title = "Demo more than 6 shapes", x="Theat (deg)", y="Magnitude") +
geom_line() +
geom_point(size=3)
gp
Esto debería darte lo que quieres. scale_shape_manual
usar scale_shape_manual
porque, incluso con sn
como factor, ggplot
solo agregará hasta 6 símbolos diferentes automáticamente. Después de eso tienes que especificarlos manualmente. Puedes cambiar tus símbolos de varias maneras. Eche un vistazo a estas páginas para obtener más información sobre cómo: http://sape.inf.usi.ch/quick-reference/ggplot2/shape
http://www.cookbook-r.com/Graphs/Shapes_and_line_types/