Jak naprawić proporcje w ggplot?
Próbuję zmienić rozmiar wykresu, aby pasował do mojego dokumentu, ale mam problemy z uzyskaniem wykresu czy kwadratu.
Przykład:
pdf(file = "./out.pdf", width = 5, height = 5)
p <- ggplot(mydata, aes(x = col1, y = col2))
print(p)
aux <- dev.off()
Chociaż granice x i y są takie same, wykres w wyniku nie jest kwadratowy. Myślę, że R sprawia, że panel obudowy 5x5", ale nie obchodzi mnie rzeczywisty rozmiar diagramu.
Jak mogę usunąć moje diagramy?3 answers
W ggplot
mechanizm zachowania proporcji wykresu polega na dodaniu coord_fixed()
warstwy do wykresu. Pozwoli to zachować proporcje samego wykresu, niezależnie od kształtu rzeczywistej obwiedni.
(sugeruję również użycie ggsave
do zapisania wykresu w formacie pdf/png/etc, zamiast sekwencji pdf(); print(p); dev.off()
.)
library(ggplot2)
df <- data.frame(
x = runif(100, 0, 5),
y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-14 15:26:06
Aby zapewnić określony współczynnik kształtu, np. dla kwadratu, użyj theme(aspect.ratio=1)
.
Andrie 's answer doesn' t give the full picture, as the example provides maybe unnatural data where range of x equals the range of y. If the data were:
df <- data.frame(
x = runif(100, 0, 50),
y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
Wtedy fabuła wyglądałaby tak:
Funkcja coord_fixed() ma również argument dostosowujący stosunek osi:
ratio
współczynnik kształtu, wyrażony jako y / x
Aby fabuła można zrobić kwadrat z:
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)
Ale musisz to dostosować do granic zmiennych lub obszaru wykresu(nie wszystkie limity są ładnie podzielne przez liczby całkowite, jak te przykłady).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-16 01:46:15
Dla kompletności: Jeśli chcesz wziąć pod uwagę bardzo różne limity osi:
df <- data.frame(
x = runif(100, 0, 5000),
y = runif(100, 0, 5))
ratio.display <- 4/3
ratio.values <- (max(df$x)-min(df$x))/(max(df$y)-min(df$y))
plot <- ggplot(df, aes(x=x, y=y)) + geom_point()
plot + coord_fixed(ratio.values / ratio.display)
W wyniku:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-31 15:48:50