График в реальных единицах [мм] - PullRequest
0 голосов
/ 30 мая 2018

Как я мог построить в R "реальные" единицы?Я хотел бы нарисовать график на бумаге формата А4, где 1 единица измерения на самом деле будет мм.Возможно ли что-то подобное?Я также хотел бы иметь возможность масштабировать график в направлении х и у.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

После того, как у моего коллеги больше нет времени делать это в Autocad, я возился с решением Джима Лемон (для рельефа).Ниже приведено решение, которое берет вектор топора и y, масштабирует их в соответствии с предоставленным масштабом и центрирует график.Остерегайтесь автоматического масштабирования принтера (необходимо указать значение 1: 1)!Пример работает для А4.

in2mm<-25.4

mx = 1000 # Scale X
my = 2000 # Scale Y 

pdf("test_size.pdf",width=210/in2mm,height=297/in2mm,paper="special")
par(mar= c(5.1,4.1,4.1,1.1))
pin <- par("pin") # returns plotheight and -width

yvalue <- sort(sample(1:1000,200))
xvalue <- sort(sample(1:500,200))

xplus <- diff(range(c(0,pin[1]*in2mm)))*(mx/1000)/2
yplus <- diff(range(c(0,pin[2]*in2mm)))*(my/1000)/2

plot(xvalue,yvalue,#asp=mx/my,
     type="n", xaxs="i", yaxs="i",
     xlim=c(mean(xvalue)-xplus,mean(xvalue)+xplus),
     ylim=c(mean(yvalue)-yplus,mean(yvalue)+yplus),
     ylab="vertical [m]",xlab="horizontal [m]")

lines(xvalue,yvalue,type="l",col="black")

legend(x="topleft",horiz=TRUE,
       legend=c(paste0("Mx: 1:",mx),paste0("My: 1:",my),
                paste0("Vertical Exaggeration: 1:",mx/my)),x.intersp=0,bty="n")

dev.off()
0 голосов
/ 27 июля 2018

Через список рассылки R-help я получил три предложения;однако в итоге мы получили коллегу, конвертировавшего необходимые участки с помощью MATLAB.Тем не менее, для дальнейшего использования, различные возможные решения (к сожалению, не проверенные):

# Jim Lemon 
in2mm<-25.4 # scale factor to convert inches to mm
pdf("test.pdf",width=8.3,height=11.7)
pin<-par("pin")
plot(c(0,pin[1]*in2mm),c(0,pin[2]*in2mm),
type="n", xaxs="i", yaxs="i")
lines(c(10,10),c(0,10))
text(11,5,"1 cm", adj=0)
lines(c(0,40),c(20,20))
text(20,24,"4 cm")
polygon(c(50,50,70,70),c(50,70,70,50))
text(60,60,"2x2 cm")
dev.off()

# Eik Vettorazzi
postscript("test.ps",paper="a4",horizontal=FALSE)
par(mai=c(1.713,0,1.713,0),xaxs="i",yaxs="i")
plot(0,type="n",xlim=c(0,190),ylim=c(0,190),xlab="",axes=FALSE)
segments(c(0,95),c(95,0),c(190,95),c(95,190))
segments(c(45,95,145,95),c(95,145,95,45),
c(95,145,95,45),c(145,95,45,95))
box()
dev.off()

# Paul Murrell
library(grid)
pushViewport(viewport(width=unit(20, "mm"), height=unit(10, "mm"),
                   xscale=c(0, 20), yscale=c(0, 10)))
grid.rect()
grid.rect(x=unit(3, "mm"), y=unit(2, "mm"),
       just=c("left", "bottom"),
       width=unit(2, "mm"), height=unit(4, "mm"))
...