2016-10-11 2 views
0

Я хочу поместить графики распределения различных переменных в один файл изображения. Каждый график распределения (subplot) содержит похожие группы, разделенные цветами.несколько графиков распределения (разные переменные) как грани в одном и том же графике

В настоящее время я использую построение каждой переменной отдельно с помощью ggplot. Затем я использую grid.arrange, чтобы объединить все подзаголовки вместе, я могу представлять все распределение.

(Пример кода ниже)

#plot1 
plot_min_RTT <- ggplot(house_total_year, aes(x=min_RTT, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#plot2 
plot_MaxMSS <- ggplot(house_total_year, aes(x=MaxMSS, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#plot3 
plot_send_buffer_size <- ggplot(house_total_year, aes(x=send_buffer_size, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#plot4 
plot_maxSpeed <- ggplot(house_total_year_filtered, aes(x=download_speed_max_month, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#combine 
grid.arrange(plot_min_RTT,plot_MaxMSS,plot_send_buffer_size,plot_maxSpeed) 

Как можно видеть, переменные, используемые для оси х каждого подзаговоре отличается. Но у всех есть аналогичные сгруппированные переменные (ISP). Я в конечном итоге с одного участка ниже:

What I currently have

Однако то, что я на самом деле хочу, чтобы иметь только одну легенду (ISP) для всех сюжетных. Я думал об использовании функции facet_wrap от ggplot, но я все еще боюсь с этим. Пожалуйста помоги.

Любое предложение будет оценено!

Спасибо! :)

+1

Данные должны быть в одном dataframe с переменной, которая может быть использована в 'facet_wrap' для создания различных участков. – Haboryme

+1

прочитайте эту главу «Добавить общую легенду для нескольких графиков ggplot2»: http://www.sthda.com/english/wiki/ggplot2-easy-way-to-mix-multiple-graphs-on-the-same -page-r-software-and-data-visualization –

+0

Спасибо @J_F! это работает! –

ответ

0

Вы не предоставили воспроизводимых данных, поэтому я использовал data.frame mpg, который поставляется вместе с пакетом ggplot.

# Subset the data 
d <- mpg[, c(1, 3:5)] 
# your ISP == manufacturer 
# Than transform the data to long format as stated already in the comments using reshape function melt 
library(reshape2) 
d_long <- melt(d) 
head(d_long) 
    manufacturer variable value 
1   audi displ 1.8 
2   audi displ 1.8 
3   audi displ 2.0 
4   audi displ 2.0 
5   audi displ 2.8 
6   audi displ 2.8 

# Now plot the data using the variable column in facet_grid for the layout. 
# scales = "free_x" is used for vairable dependend x-axis scales. 
ggplot(d_long, aes(x = value, colour = manufacturer)) + 
    geom_density() + 
    facet_grid(~ variable, scales = "free_x") + 
    theme_bw() 
# Instead of using facet_grid you can try 
# facet_wrap(~ variable, scales = "free_x", ncol = 2) 
# to arrange the plots row- and colwise as your needs are. The scaling of both axis can also changed. 
ggplot(d_long, aes(x = value, colour = manufacturer)) + 
    geom_density() + 
    facet_wrap(~ variable, scales = "free", ncol = 2) + 
    theme_bw() 

enter image description here

+0

благодаря @Jimbou, единственной проблемой с этим решением является невозможность иметь разные метки оси Y для каждого подзаголовка. –

+0

@TaraSutjarittham посмотреть мои правки. Почему вам нужны разные y-метки для графика плотности? Это всегда должно быть «плотность» для каждого сюжета. – Jimbou

+0

@Jumbou, извините, я имею в виду x-aixs :) –