Próbuję wyświetlić niektóre informacje o danych poniżej wykresu utworzonego w ggplot2. Chciałbym narysować zmienną N za pomocą współrzędnej osi X wykresu, ale współrzędna Y musi wynosić 10% od dołu ekranu. W rzeczywistości pożądane współrzędne Y są już w ramce danych jako zmienna y_pos.Wyświetlanie tekstu poniżej wykresu generowanego przez ggplot2
mogę myśleć 3 podejścia z wykorzystaniem ggplot2:
1) Utwórz pusty wykres poniżej rzeczywistej działce przy użyciu tej samej skali, a następnie użyć geom_text wykreślić dane na pustej działce. This approach rodzaj prac, ale jest niezwykle skomplikowany.
2) Użyj , aby narysować dane, ale w jakiś sposób użyj współrzędnej y jako procent ekranu (10%). To wymusiłoby wyświetlenie liczb poniżej wykresu. Nie mogę znaleźć właściwej składni.
3) Użyj grid.text, aby wyświetlić tekst. Mogę łatwo ustawić go na 10% od dołu ekranu, ale nie mogę wymyślić, jak ustawić współrzędne X, aby dopasować wykres. Próbowałem użyć programu grconvert, aby uchwycić początkową pozycję X, ale nie mogłem tego również wykorzystać.
Poniżej jest podstawowym działka z danymi manekina:
graphics.off() # close graphics windows
library(car)
library(ggplot2) #load ggplot
library(gridExtra) #load Grid
library(RGraphics) # support of the "R graphics" book, on CRAN
#create dummy data
test= data.frame(
Group = c("A", "B", "A","B", "A", "B"),
x = c(1 ,1,2,2,3,3),
y = c(33,25,27,36,43,25),
n=c(71,55,65,58,65,58),
y_pos=c(9,6,9,6,9,6)
)
#create ggplot
p1 <- qplot(x, y, data=test, colour=Group) +
ylab("Mean change from baseline") +
geom_line()+
scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1)) +
opts(
legend.position=c(.1,0.9))
#display plot
p1
Zmodyfikowany gplot poniżej wyświetla liczby osobników, jednak są one wyświetlane w działce. Zmuszają one do wydłużenia skali Y. Chciałbym wyświetlić te numery PONIŻEJ działki.
p1 <- qplot(x, y, data=test, colour=Group) +
ylab("Mean change from baseline") +
geom_line()+
scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1)) +
opts(plot.margin = unit(c(0,2,2,1), "lines"),
legend.position=c(.1,0.9))+
geom_text(data = test,aes(x=x,y=y_pos,label=n))
p1
Inne podejście do wyświetlania liczb polega na utworzeniu fikcyjnego wykresu poniżej faktycznego wykresu. Oto kod:
graphics.off() # close graphics windows
library(car)
library(ggplot2) #load ggplot
library(gridExtra) #load Grid
library(RGraphics) # support of the "R graphics" book, on CRAN
#create dummy data
test= data.frame(
group = c("A", "B", "A","B", "A", "B"),
x = c(1 ,1,2,2,3,3),
y = c(33,25,27,36,43,25),
n=c(71,55,65,58,65,58),
y_pos=c(15,6,15,6,15,6)
)
p1 <- qplot(x, y, data=test, colour=group) +
ylab("Mean change from baseline") +
opts(plot.margin = unit(c(1,2,-1,1), "lines")) +
geom_line()+
scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1)) +
opts(legend.position="bottom",
legend.title=theme_blank(),
title.text="Line plot using GGPLOT")
p1
p2 <- qplot(x, y, data=test, geom="blank")+
ylab(" ")+
opts( plot.margin = unit(c(0,2,-2,1), "lines"),
axis.line = theme_blank(),
axis.ticks = theme_segment(colour = "white"),
axis.text.x=theme_text(angle=-90,colour="white"),
axis.text.y=theme_text(angle=-90,colour="white"),
panel.background = theme_rect(fill = "transparent",colour = NA),
panel.grid.minor = theme_blank(),
panel.grid.major = theme_blank()
)+
geom_text(data = test,aes(x=x,y=y_pos,label=n))
p2
grid.arrange(p1, p2, heights = c(8.5, 1.5), nrow=2)
enter code here
jednak, że jest bardzo skomplikowana i trudno byłoby zmodyfikować dla różnych danych. Idealnie, chciałbym móc przekazać współrzędne Y jako procent ekranu. Z góry dziękuję!
annotation_custom() i kod [stąd] (http://stackoverflow.com/questions/9690648/point-clipped-on-x-axis-in-ggplot) mogą ci pomóc. Zobacz poniżej. –
Zobacz moją odpowiedź poniżej. Jest to zdecydowanie prostsze niż zaakceptowana odpowiedź. –
Najnowsze wersje ggplot2 mają teraz tę funkcjonalność wbudowaną zgodnie z odpowiedzią poniżej: http://stackoverflow.com/a/36036479/170352 –