2015-09-11 2 views
0

Я хочу сделать одну цифру, образованную 3 ящиками, и я использую код ниже, однако конечная фигура имеет неправильную пропорцию (см. Ниже). Какую функцию/параметр изменить?Размер и пропорция размеров ящиков

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) 
grid.newpage() 
pushViewport(viewport(layout = grid.layout(1, 3))) 
print(A, vp = vplayout(1,1)) 
print(B, vp = vplayout(1,2)) 
print(C, vp = vplayout(1,3)) 

enter image description here

+0

Возможно, касательная, но вы можете рассмотреть возможность удаления легенд с двух участков. Они одинаковы во всех изображениях. – Heroka

+0

Для этого вы должны использовать 'facet_grid (...)' или 'facet_wrap (...)'. – jlhoward

ответ

3

Вот пример facetting. Это было бы много проще, если бы вы предоставили свои данные. Пожалуйста, сделайте это в будущем!

set.seed(1) 
df <- data.frame(ID=rep(c("WTN","KON","WTH","KOH"),each=30), 
       AMP = rnorm(120, sd=20), 
       ADP = rnorm(120, sd=10), 
       ATP = rnorm(120, sd=30)) 

library(reshape2) 
library(ggplot2) 
gg.df <- melt(df, id="ID", variable.name="Adenosine") 
ggplot(gg.df, aes(x=ID, y=value, fill=ID))+ 
    geom_boxplot()+ 
    facet_wrap(~Adenosine) 

Объяснение: Я предполагаю, что ваши данные для АМФ, АДФ и АТФ в разных колонках, и именно поэтому вы сделали три различных ggplots (конечно, я не могу знать, потому что вы не предоставили свои данные (!!)). Правильный метод решения этой проблемы преобразует ваши данные из «широкого» формата (данные в разных столбцах) в «длинный» формат (все данные в одном столбце со вторым столбцом, чтобы отличать исходные столбцы). Для этого мы используем melt(...). Затем мы можем заполнить с помощью ID и разделить на грани, используя Adenosine.

Этот шаблон: широкоформатные данные> длинные данные> ggplot чрезвычайно распространен. Если вы планируете регулярно пользоваться ggplot, вам следует ознакомиться с ним.

Смежные вопросы