Я пытаюсь создать свой собственный геом. На экране геом всегда должен быть квадратом, независимо от масштаба. Учитывая значения w
и h
(для ширины и высоты), преобразованные ggplot из пользовательских координат в координаты сетки, идея состоит в том, чтобы сжать одно из них таким образом, чтобы на экране аспект получающегося прямоугольника был точно равен час Если w == h, мы получаем квадрат.
Это выполнимо в базовом R, консультируясь par("pin")
:
## w and h are box width and height in user coordinates
## if w == h, we will should get a square
aspect <- 1 # change to get a rectangle with a given aspect ratio
pp <- par("pin")
pu <- par("usr")
pu <- c(pu[2]-pu[1], pu[4]-pu[3])
ppu <- pp/pu
wi <- w * ppu[1] # box width in inches
hi <- h * ppu[2] # box height in inches
if(wi > hi * aspect) {
wi <- hi * aspect
} else {
hi <- wi / aspect
}
w <- wi / ppu[1]
h <- hi / ppu[2]
Однако мне трудно понять, как сделать то же самое с сеткой. Возможно ли это?
Что я хочу сделать: я хочу сделать небольшой сюжет-сюжет, который в некоторых случаях должен быть точно квадратным, в противном случае это выглядит некрасиво.