R ggplot2 исправляет текст легенды к значению и цвету - PullRequest
0 голосов
/ 03 марта 2019

У меня есть список l чисел (в моем случае 3600, представляющих различные категории (0,2,3,4,5,6,7,8), которые я рассчитывал ранее).Теперь я хочу построить сетку, где каждое число в списке представляет определенный цвет (т. Е. 0 -> всегда черный, 3 -> всегда оранжевый ...).

Но вместо цифр я хочуобъяснение категорий в легенде.И мой код работает нормально, когда все категории в моем списке.В некоторых случаях не каждая категория появляется в моем списке (зависит от данных).

Как я могу связать ярлык с категорией (номером), чтобы в любом случае был представлен правильный цвет или, вернее, правильное описаниедля цвета?

# example list
l <- list(sample(c(0,2:8), 3600, replace = TRUE))

# building a data.frame for the grid
C <- as.data.frame(unlist(l))
colnames(C) <- c("category")

y.df <- rep(1:60, each = 60)
x.df <- rep(1:60, times = 60)
z.df <- rep(1:3600, times = 1)

C <- cbind(C, x = x.df, y = y.df, node_chem = z.df)

myColors <- c("black", "darkorchid1", "orange", "red",
              "springgreen", "darkgreen", "cyan", "white")
names(myColors) <- c ("0", "2", "3", "4", "5", "6", "7", "8")

ggplot(data=C, aes(x = x, y = y,  color = factor(C$category))) +    
  geom_point() +

  # background = white
  theme_bw() +

  scale_color_manual(name= "category",
                     values= myColors,
                     labels = c("category 0", "category 2", "category 3", "category 4", 
                                "icategory 5", "category 6", "category 7", "category 8")) +

  #scale_colour_gradientn(colours=rainbow(4)) +
  ggtitle("my map")

Здесь вывод, когда все категории были вычислены ранее:

enter image description here

1 Ответ

0 голосов
/ 03 марта 2019

Создайте столбец, содержащий метки категорий, затем вы можете указать его для эстетики цвета.

# example list
l <- list(sample(c(0,2:8), 3600, replace = TRUE))

# building a data.frame for the grid
C <- as.data.frame(unlist(l))
colnames(C) <- c("category")

y.df <- rep(1:60, each = 60)
x.df <- rep(1:60, times = 60)
z.df <- rep(1:3600, times = 1)

C <- cbind(C, x = x.df, y = y.df, node_chem = z.df)

myColors <- c("black", "darkorchid1", "orange", "red",
              "springgreen", "darkgreen", "cyan", "white")

# change the named vector to match the category labels
names(myColors) <- paste("category", c("0", "2", "3", "4", "5", "6", "7", "8"), sep = " ")

# make a new column containing the desired category labels
C$category2 <-  paste("category", C$category, sep = " ")

ggplot(data = C, aes(x = x, y = y,  color = factor(category2))) +    
  geom_point() +

  # background = white
  theme_bw() +

  scale_color_manual(name= "category",
                     values= myColors) +

  ggtitle("my map")

Теперь, если вы уберете одну из категорий, она все равно будет работать, потому что ваш названный вектор вscale_color_manual правильно отобразит цвет:

ggplot(data = C[C$category != 0,], aes(x = x, y = y,  color = factor(category2))) +    
geom_point() +

  # background = white
  theme_bw() +

  scale_color_manual(name= "category",
                     values= myColors) +

  ggtitle("my map")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...