Использовать значения столбцов одних данных и использовать их для построения графика в другом

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть две таблицы данных dat и dat.num . Я создал гистограмму из данных dat . По оси x я хотел бы включить значения столбца n из данных dat.num . Здесь я сделал это вручную, но есть ли способ напрямую скопировать его из данных dat.num ? Также в заголовок графика я хотел бы включить сумму n . Любая помощь приветствуется. Спасибо!

 dat <- read.table(text = "Var Type1 Type2
A1 9217    13725
A2 6226    9133
A3 14888   21531
A4 5272    7482
A5 4489    6608
A6 8298    12212", header= T)

dat.num <- read.table(text = "n Dat Mat
                      3 5 8
                      10 2 3
                      11 2 5
                      100 2 5
                      1 2 33
                      15 2 3", header=T)
library(ggplot2)
library(reshape2)
dat.m <- melt(dat)

ggplot(dat.m, aes(Var, value, fill = variable))   
  geom_bar(stat = "identity")   
  scale_x_discrete(limits=c('A1','A2','A3','A4','A5','A6'),
                   labels= c('name1n(n=3)',
                             'name2n(n=10)',
                             'name3n(n=11)',
                             'name4n(n=100)',
                             'name5n(n=1)',
                             'name6n(n=15)')) 
  labs(x="Type", 
       y="Value",
       title="My plot",
       subtitle="n_total = 140")
  

Ответ №1:

Вместо этого вы можете использовать paste() или paste0() для установки меток и субтитров по оси x, например:

 ggplot(dat.m, aes(Var, value, fill = variable))   
 geom_bar(stat = "identity")   
 scale_x_discrete(limits=c('A1','A2','A3','A4','A5','A6'),
                  labels= paste0("name", 1:6, "n(n=", dat.num$n, ")")) 
 labs(x="Type", 
      y="Value",
      title="My plot",
      subtitle=paste("n_total =",  sum(dat.num$n)))
  

По умолчанию paste() используется пробел в качестве разделителя между строками. paste0() эквивалентно paste(..., sep = "") , без разделителя.

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

1. Вместо этого используйте один paste0 с вашими именами в векторе. Например. paste0(c("abc", "def", "ghi", "jkl", "mno", "pqr"), "n(n=", dat.num$n, ")")