R:Сглаженная точечная диаграмма, создающая определенный цвет для значений

#r #plot #scatter-plot

Вопрос:

Привет я создал гладкой точечной диаграмме цвета, основываясь на данные категории,теперь я не получаю, какой цвет, какие категории так понять, если я прохожу определенный цвет для каждой категории оно будет выглядеть более удобным согласно тому, как я могу сделать это col=df$cat не цвет определенной точки оно принадлежит мне непонятно любой один предложить мне

определенный цвет для каждой категории, например, data1=зеленый, data2=синий, data3=черный, data4=красный

мои данные

    A    B   cat
 0.8803 0.0342  data1
 0.9174 0.0331  data1
 0.9083 0.05    data1
 0.7542 0.161   data2
 0.8983 0.0593  data2
 0.8182 0.1074  data2
 0.3525 0.3525  data3
 0.5339 0.2288  data3
 0.7295 0.082   data3
 0.8    0.0417  data4
 0.8291 0.0598  data4
 0.8    0.025   data4
 

сценарий, который я пробовал

 df=read.table("test.txt", sep='t', header=TRUE)
smoothScatter(df$B,df$A,,nrpoints=Inf,xlim=c(0,1),ylim=c(0,1), pch=20,cex=1, col=df$cat)
points(c(0,1),c(1,0),type='l',col='green',lty=2,lwd=2)
legend(0.30, 1, c("diagonal"), 
       col = c("green"), 
       lty = 2, lwd = 4) 
 

Спасибо

Ответ №1:

Сначала создайте вектор цветов как именованный вектор. Затем составьте заговор с x=A , y=B и, geom_point только, color=cat . Диагональная линия рисуется geom_line вызовом с новым data аргументом, конечными точками линии.

 library(ggplot2)

color <- c(data1="green", data2="blue", data3="black", data4="red")

ggplot(df, aes(A, B))  
  geom_point(aes(color = cat), alpha = 0.25)  
  geom_line(
    data = data.frame(A = 0:1, B = 1:0),
    mapping = aes(A, B),
    color = "green",
    linetype = "dashed"
  )  
  scale_color_manual(values = color)  
  theme_bw()
 

введите описание изображения здесь


Основание R

С smoothScatter графиком все обстоит следующим образом.

 colnum <- match(df$cat, names(color))

smoothScatter(
  df$B, df$A,
  nrpoints = Inf,
  xlim = c(0, 1), ylim = c(0, 1), 
  pch = 20, cex = 1, 
  col = color[colnum]
)
points(c(0, 1), c(1, 0), type = 'l', col = 'green', lty = 2, lwd = 2)
legend(0.30, 1, "diagonal", col = "green", lty = 2, lwd = 4) 
 

введите описание изображения здесь

Или, если мы удалим nrpoints = Inf

 smoothScatter(
  df$B, df$A,
  #nrpoints = Inf,
  xlim = c(0, 1), ylim = c(0, 1), 
  pch = 20, cex = 1, 
  col = color[colnum]
)
points(c(0, 1), c(1, 0), type = 'l', col = 'green', lty = 2, lwd = 2)
legend(0.30, 1, "diagonal", col = "green", lty = 2, lwd = 4) 
 

введите описание изображения здесь

Данные

 google_id <- "1FN0H7ilY9OwcQC7Y8iiLUZd2CTuJ9U4Z"
google_file <- sprintf("https://docs.google.com/uc?id=%samp;export=download", google_id)
df <- read.table(google_file, header = TRUE)
 

Комментарии:

1. Спасибо, но когда я пытаюсь это сделать со всем моим набором данных, он не работает, я точно знаю, падали ли мои значения, я пытался с этими данными drive.google.com/file/d/1FN0H7ilY9OwcQC7Y8iiLUZd2CTuJ9U4Z/…

2. Даже я пробовал с отдельными значениями для каждой категории, давал разные цвета, которые не совпадают

3. @Luckysardar , на который я перешел ggplot , см. правку.

4. @Luckysardar Кроме того, я попытался сопоставить цвета с данными, используя свой предыдущий код, и это сработало, но, как и это ggplot , я сделаю это автоматически.

5. Я попробовал ggplot, он показывает именно то, что я хотел, проблема в том, что я хотел предыдущий сюжет, пожалуйста, покажите мне сюжет и код, как он выглядит, я в моем случае он не выглядит так же