ggplot2: объединить условные обозначения цвета и формы в одно

#r #ggplot2

#r #ggplot2

Вопрос:

Мой код работал раньше, но условные обозначения формы и цвета теперь разделены.

 ## loading packages
library(tibble)
library(ggplot)
## an example of data
my_data <- tibble(x = seq(1:10), 
                 y = rnorm(10, mean = 0, sd = 1),
                 z = rep(c("{ }^{2}*H", "{ }^{18}*O"), 5))
  

Пример набора данных может быть таким:

 my_data
# A tibble: 10 x 3
       x       y z         
   <int>   <dbl> <chr>     
 1     1  0.631  { }^{2}*H 
 2     2  1.43   { }^{18}*O
 3     3 -0.548  { }^{2}*H 
 4     4 -1.42   { }^{18}*O
 5     5  1.72   { }^{2}*H 
 6     6 -0.816  { }^{18}*O
 7     7  0.0297 { }^{2}*H 
 8     8 -0.471  { }^{18}*O
 9     9 -0.565  { }^{2}*H 
10    10  0.448  { }^{18}*O
  

Когда я хотел нарисовать простой точечный график, используя следующий код:

 my_colors <- c("#00BFC4", "#F8766D")

ggplot(data = my_data,
       mapping = aes(x = x, y = y, color = z, shape = z))  
  geom_point()  
  geom_line()  
  scale_color_manual(name = "", 
                     labels = parse_format(),
                     values = my_colors)  
  scale_shape_manual(name = "", 
                     labels = parse_format(),
                     values = c(16:17)) 
  

Условные обозначения разделяются, как показано на следующем рисунке:
введите описание изображения здесь

Но это было сделано более гладко, как показано на следующем рисунке:

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

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

1. Если название и метки совпадают, то должна быть нарисована только одна легенда. В данном случае этого не происходит, поэтому я думаю, что недавно была добавлена ошибка, связанная с использованием parse_format() или label_parse() в scale_*_manual() заявлениях

2. Вероятно, потому, что у меня это работало раньше.

Ответ №1:

Вот мое последнее обновление. Вы можете использовать as.expression и bquote

 ggplot(data = my_data, mapping = aes(x = x, y = y, color = z, shape = z, group = z))              
  geom_point()              
  geom_line()      
  scale_color_discrete(name = "", labels = c(as.expression(bquote({ }^{2}*"H")), as.expression(bquote({ }^{18}*"O")))) 
  scale_shape_discrete(name = "", labels = c(as.expression(bquote({ }^{2}*"H")), as.expression(bquote({ }^{18}*"O"))))
  

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

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

1. когда я использую что-то похожее на ваш код, следующим образом: ggplot(data = my_data, mapping = aes(x = x, y = y, color = z, shape = z)) geom_point() geom_line() scale_color_discrete(name = "", labels = c(expression({ }^{2}*"H"), expression({ }^{18}*"O"))) scale_shape_discrete(name = "", labels = c(expression({ }^{2}*"H"), expression({ }^{18}*"O"))) Это все еще не работает. Я думаю, это может быть связано с выражениями.