studio - Puntos de trazado de dispersión de color R basados en valores
plot en r (3)
Soy capaz de trazar un diagrama de dispersión y colorear los puntos según un criterio, es decir, puedo colorear todos los puntos> = 3 como rojo y el resto como negro. Me encantaría poder colorear puntos de esta manera:
= 3 colores rojos
- <= 1 color azul
- El resto como negro
El código que tengo a continuación completa los pasos 1 y 3, pero no estoy seguro de cómo incorporar el segundo argumento del paso 2
data<- read.table(''sample_data.txtt'', header=TRUE, row.name=1)
pos<- data$col_name1
cn<- data$col_name2
plot(pos,cn, ylim=c(0,5), col="blue")
plot(pos,cn, col=ifelse(cn>=3,"red","black"), ylim=c(0,10))
Cualquier ayuda seria genial !!! Gracias por adelantado
Es mejor crear una nueva variable de factor usando cut (). He agregado algunas opciones usando ggplot2 también.
df <- data.frame(
X1=seq(0, 5, by=0.001),
X2=rnorm(df$X1, mean = 3.5, sd = 1.5)
)
# Create new variable for plotting
df$Colour <- cut(df$X2, breaks = c(-Inf, 1, 3, +Inf),
labels = c("low", "medium", "high"),
right = FALSE)
### Base Graphics
plot(df$X1, df$X2,
col = df$Colour, ylim = c(0, 10), xlab = "POS",
ylab = "CS", main = "Plot Title", pch = 21)
plot(df$X1,df$X2,
col = df$Colour, ylim = c(0, 10), xlab = "POS",
ylab = "CS", main = "Plot Title", pch = 19, cex = 0.5)
# Using `with()`
with(df,
plot(X1, X2, xlab="POS", ylab="CS", col = Colour, pch=21, cex=1.4)
)
# Using ggplot2
library(ggplot2)
# qplot()
qplot(df$X1, df$X2, colour = df$Colour)
# ggplot()
p <- ggplot(df, aes(X1, X2, colour = Colour))
p <- p + geom_point() + xlab("POS") + ylab("CS")
p
p + facet_grid(Colour~., scales = "free")
Lo mejor que puede hacer aquí es agregar una columna al objeto de datos para representar el color del punto. A continuación, actualice las secciones de la misma mediante el filtrado.
data<- read.table(''sample_data.txtt'', header=TRUE, row.name=1)
# Create new column filled with default colour
data$Colour="black"
# Set new column values to appropriate colours
data$Colour[data$col_name2>=3]="red"
data$Colour[data$col_name2<=1]="blue"
# Plot all points at once, using newly generated colours
plot(data$col_name1,data$col_name2, ylim=c(0,5), col=data$Colour, ylim=c(0,10))
Debe quedar claro cómo adaptar esto para parcelas con más colores y condiciones.
También funcionaría simplemente especificar ifelse()
dos veces:
plot(pos,cn, col= ifelse(cn >= 3, "red", ifelse(cn <= 1,"blue", "black")), ylim = c(0, 10))