При таком комбинированном сюжете зачастую проще составить их все по отдельности, прежде чем пытаться объединить их вместе:
library(ggplot2)
# line plot
p.line <- ggplot(myd,aes(x=pos)) +
geom_line(aes(y=linevar)) + # plot the line using linevar
# draw the scales. NOTE: position[1] should be 0 not 1.
scale_x_continuous(breaks=position,labels=label)
# bar plot
p.bar <- ggplot(myd,aes(x=pos)) +
geom_bar(aes(y=barvar),stat='identity') + # plot the bar chart
scale_y_reverse() # reverse y scale
# heat plot
p.heat <- ggplot(myd,aes(x=pos)) +
geom_tile(aes(y=-.5,fill=heatmapvar,height=.5)) + # draw heatmap
scale_fill_gradient(low="yellow",high="red") # colour scale
Вы можете использовать print(p.xxx)
, чтобы посмотреть, как они выглядят.
Теперь мы можем объединить их все вместе, используя grid.arrange
в gridExtra
:
library(gridExtra)
grid.arrange(p.line,p.heat,p.bar)
Это выглядит так:
(Примечание. Моя гистограмма выдала предупреждение, потому что у меня отрицательный barvar
- я предполагаю, что данные, которые вы собираетесь использовать, не будут иметь этой проблемы).
Теперь тепловая карта выглядит немного некрасивои похоже, что вы хотите, чтобы он нарисовал на карте линий, поэтому мы можем вместо этого добавить ее на карту линий:
Я не хочу, чтобы карта тепла отображалась над линией, поэтому я сам установлю ее позицию и высоту:
hght <- .25 # just looked nice - you'll have to adjust based on your data
ypos <- min(myd$linevar)-hght
p.line2 <- p.line +
geom_tile(aes(x=pos-.5,y=ypos, fill=heatmapvar, height=hght)) +
scale_fill_gradient(low="yellow",high="red") +
opts(legend.position="none") # <-- turn off the heatmap legend.
# print(p.line2)
Примечание - я добавил в x=pos-.5
, потому что в противном случае geom_tile
центрирует плитки по значению x, которое нене выстраиваются в линию (попробуйте без x=pos-.5
, чтобы понять, что я имею в виду).
позиции маркировки
метка <- c ("A", "B", "C", "D ","E "," F "," G "," H "," I ") положение <- c (1, 5, 10, 15, 20, 25, 30, 35, 40) </p>
Теперь, когдаЯ организую это:
grid.arrange(p.line2,p.bar)
Это выглядит так:
Что касается подстройки цветов, добавления заголовков и т. Д. - вы можете сделать это.Я бы порекомендовал настроить отдельные графики, чтобы получить их так, как вам нравится, а затем только объединить их в конце.ggplot2 heatmap '(например, более полезна с точки зрения получения примеров для работы).