Próbuję napisać skrypt, który tworzy cztery różne wykresy na jednym obrazie. W szczególności chcę, aby odtworzyć tę grafikę jak najdokładniej:R - jak przydzielić przestrzeń ekranu do złożonych obrazów ggplot
Mój obecny skrypt tworzy czterech działek podobnych do nich, ale nie mogę dowiedzieć się, w jaki sposób rozdzielić ekranem Nieruchomości odpowiednio. Chcę:
- modyfikować wysokość i szerokość działki, tak aby wszystkie cztery mają jednakową szerokość, jedno jest znacznie wyższy niż w innych, które mają jednolitą wysokość wśród nich
- określić położenie legendy współrzędnych tak, że mogę korzystać z miejsca na ekranie skutecznie
- modyfikować ogólny kształt mojego obrazu wyraźnie, ile potrzeba (być może będzie trzeba go bliżej w kształcie kwadratu w pewnym momencie)
GENERUJ Niektóre dane do wykreślenia
pt_id = c(1:279) # DEFINE PATIENT IDs
smoke = rbinom(279,1,0.5) # DEFINE SMOKING STATUS
hpv = rbinom(279,1,0.3) # DEFINE HPV STATUS
data = data.frame(pt_id, smoke, hpv) # PRODUCE DATA FRAME
Dodać stronę anatomicznych DANE
data$site = sample(1:4, 279, replace = T)
data$site[data$site == 1] = "Hypopharynx"
data$site[data$site == 2] = "Larynx"
data$site[data$site == 3] = "Oral Cavity"
data$site[data$site == 4] = "Oropharynx"
data$site_known = 1 # HACK TO FACILITATE PRODUCING BARPLOTS
ADD mutacji dane częstotliwości
data$freq = sample(1:1000, 279, replace = F)
DEF BARPLOT
require(ggplot2)
require(gridExtra)
bar = ggplot(data, aes(x = pt_id, y = freq)) + geom_bar(stat = "identity") + theme(axis.title.x = element_blank(), axis.ticks.x = element_blank(), axis.text.x = element_blank()) + ylab("Number of Mutations")
# DEFINE BINARY PLOTS
smoke_status = ggplot(data, aes(x=pt_id, y=smoke, fill = "red")) + geom_bar(stat="identity") + theme(legend.position = "none", axis.title.x = element_blank(), axis.ticks.x = element_blank(), axis.text.x = element_blank()) + ylab("Smoking Status")
hpv_status = ggplot(data, aes(x=pt_id, y = hpv, fill = "red")) + geom_bar(stat="identity") + theme(legend.position = "none", axis.title.x = element_blank(), axis.ticks.x = element_blank(), axis.text.x = element_blank()) + ylab("HPV Status")
site_status = ggplot(data, aes(x=pt_id, y=site_known, fill = site)) + geom_bar(stat="identity")
wyprodukowali cztery wykresy łącznie
grid.arrange(bar, smoke_status, hpv_status, site_status, nrow = 4)
Podejrzewam, że funkcje potrzebne do wykonania tych zadań są już zawarte w ggplot2 i gridExtra, ale nie byłem w stanie dowiedzieć się, w jaki sposób. Ponadto, jeśli którykolwiek z moich kodów jest nadmiernie szczegółowy lub istnieje prostszy, bardziej elegancki sposób robienia tego, co już zrobiłem - proszę, skomentuj to również.
W pierwszym pytaniu można określić układ z 6 rzędami, a następnie umieścić górny wykres w pierwszych 3 rzędach. Zobacz funkcję multiplot tutaj dla [http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/] – RHA
Tego typu rzeczy zwykle wymagają robienia rzeczy "ręcznie" przy użyciu narzędzi z ** siatki ** pakietu . Zacznę od spojrzenia na 'ggplot_build' i' ggplot_gtable', aby rozłożyć wykresy na groby komponentu, a następnie prawdopodobnie skonstruujesz własny układ ('grid.layout') i narysujesz poszczególne groby w określonych rzutniach. – joran
Możesz również rzucić okiem na wiki '' gtable' (https://github.com/baptiste/gtable/wiki/Description) – Henrik