Ggplot2: вручную назначать разные размеры текста и толщину строки одновременно?

#r #ggplot2

#r #ggplot2

Вопрос:

Мне нужны линии диаграммы с предопределенной толщиной и размерами меток с предопределенным размером. Метки более толстой строки должны быть больше.

Входные данные:

 df = data.frame(A = c(1:10, 1:10),
                B = runif(20),
                C = c(rep("A", 10), rep("B", 10)))
 

Я могу легко назначить необходимую толщину строки в зависимости от переменной:

 lines.size = c(2, 0.7)
names(lines.size) = c("A", "B")

ggplot(df, aes(x = A, y = B, group = C, color = C))  
  geom_line(aes(size = C))  
  geom_text(aes(y = B   0.1, label = round(B, 1)))  
  scale_size_manual(values = lines.size)
 

Таким же образом я могу назначить размер меток:

 label.size = c(5, 2)
names(label.size) = c("A", "B")
    
ggplot(df, aes(x = A, y = B, group = C, color = C))  
  geom_line()  
  geom_text(aes(y = B   0.1, label = round(B, 1), size = C))  
  scale_size_manual(values = label.size)
 

ggplot2 допускает только один scale_size_manual. Есть ли какой-либо способ контролировать как размер надписи, так и толщину строки?

Любые идеи приветствуются!

Ответ №1:

Попробуйте использовать это с помощью ggnewscale package и функции new_scale() , в которой вы определяете геометрию, которую хотите добавить, в данном случае size :

 library(ggnewscale)
library(ggplot2)
#Inputs
lines.size = c(2, 0.7)
names(lines.size) = c("A", "B")
label.size = c(5, 2)
names(label.size) = c("A", "B")
#Plot
ggplot(df, aes(x = A, y = B, group = C, color = C))  
  geom_line(aes(size = C))  
  scale_size_manual(values = lines.size) 
  new_scale("size") 
  geom_text(aes(y = B   0.1, label = round(B, 1), size = C))  
  scale_size_manual(values = label.size)
 

Вывод:

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