#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)
Вывод: