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?
 60
Author: zx8754, 2011-08-14

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()

Tutaj wpisz opis obrazka

 84
Author: Andrie,
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:

Tutaj wpisz opis obrazka

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)

Tutaj wpisz opis obrazka

Ale musisz to dostosować do granic zmiennych lub obszaru wykresu(nie wszystkie limity są ładnie podzielne przez liczby całkowite, jak te przykłady).

 53
Author: a different ben,
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:

 7
Author: Graipher,
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