Писал тут
недавно про то, как считали, а потом рисовали. Вот, что получилось:
Она пока не идеальна, но уже довольно близка к тому, что хотелось бы видеть. Теперь два слова о том, как это получилось.
Надо сказать, что отрисовка по умолчанию была нечитабельна -- надписи наползали друг на друга и на точки.
png("flickr_plot.1.png", width=750, height=750)
par(cex.lab=2, cex.axis=2, cex.main=2.2, mar=c(5,5,4,2), lwd=3)
plot(dc.table$sty.1, dc.table$only.sh.1, pch=dc.table$shape, bg="black", cex=3,
+ xlim=c(1755,1860), frame=F, main="A", xlab="Years", ylab="Some mystery quotient")
text(dc.table$sty.1, dc.table$only.sh.1, labels=dc.table$d, pos=4, cex=1.5)
abline(v=c(1804, 1835), lty=2, lwd=3)
axis(1, lwd=4.5)
axis(2, lwd=4.5)
dev.off()
Операция по превращению этого наброска в иллюстрацию, пригодную для печати, проходила в несколько этапов. Сначала я перекрасил точки в серый цвет, чтобы разглядеть надписи (для манипуляций с подписями точек необходимо видеть каждую из них). Добрый совет: чтобы такое получилось, необходимо использовать символы с заливкой. В
таблице символов, используемых командой plot в R -- это символы с кодами 21--25, у которых цвет заливки управляется параметром bg.
png("flickr_plot.2.png", width=750, height=750)
par(cex.lab=2, cex.axis=2, cex.main=2.2, mar=c(5,5,4,2), lwd=3)
plot(dc.table$sty.1, dc.table$only.sh.1, pch=dc.table$shape, bg="grey", cex=3,
+ xlim=c(1755,1860), frame=F, main="A", xlab="Years", ylab="Some mystery quotient")
text(dc.table$sty.1, dc.table$only.sh.1, labels=dc.table$d, pos=4, cex=1.5)
abline(v=c(1804, 1835), lty=2, lwd=3)
axis(1, lwd=4.5)
axis(2, lwd=4.5)
dev.off()
Потом я в несколько приемов аккуратно подвинул координаты для подписей к точкам, создав специальные переменные pos, dx и dy.
dc.table$pos <- c(rep(4, 3), 3, 4, 2, 4, 1, rep(4, 7), 3, 1, rep(4, 5),
+ 2, rep(4, 4), 2, 2, rep(4, 3), 3, rep(4, 2), 2, rep(4, 13), 1, 1, 3,
+ rep(4, 6), 2, 4, 3, rep(4, 3), 2, rep(4, 2), 3, rep(4, 7))
dc.table$dx <- c(rep(2, 3), 0, 2, -1, 2, 0, rep(2, 7), 0, 1, rep(2, 5), -2, rep(2, 3),
+ -14, -1, -2, rep(2, 3), 0, rep(2, 2), -1, rep(2, 4), 1, rep(2, 8),
+ -1, 2.5, 0, rep(2, 6), -2, 2, -6, rep(2, 3), -2, rep(2, 2), -1, 2, 1,
+ rep(2, 5))
dc.table$dy <- c(rep(0, 3), .02, rep(0, 3), -.02, rep(0, 7), .02, -.005,
+ rep(0, 9), -.04, rep(0, 5), .02, rep(0, 2), -.01, rep(0, 4), -.01,
+ rep(0, 8), -.02, -.01, .02, rep(0, 8), .01, rep(0, 6), .02, rep(0, 7))
png("flickr_plot.3.png", width=750, height=750)
par(cex.lab=2, cex.axis=2, cex.main=2.2, mar=c(5,5,4,2), lwd=3)
plot(dc.table$sty.1, dc.table$only.sh.1, pch=dc.table$shape, bg="grey", cex=3,
+ xlim=c(1755,1860), frame=F, main="A", xlab="Years", ylab="Some mystery quotient")
text(dc.table$sty.1+dc.table$dx, dc.table$only.sh.1+dc.table$dy, labels=dc.table$d,
+ pos=dc.table$pos, cex=1.5)
abline(v=c(1804, 1835), lty=2, lwd=3)
axis(1, lwd=4.5)
axis(2, lwd=4.5)
dev.off()
Одна из подписей (l.70) находилась в самой гуще событий, поэтому ее пришлось оттащить довольно далеко, а от нее к точке нарисовать стрелку.
png("flickr_plot.4.png", width=750, height=750)
par(cex.lab=2, cex.axis=2, cex.main=2.2, mar=c(5,5,4,2), lwd=3)
plot(dc.table$sty.1, dc.table$only.sh.1, pch=dc.table$shape, bg="grey", cex=3,
+ xlim=c(1755,1860), frame=F, main="A", xlab="Years", ylab="Some mystery quotient")
text(dc.table$sty.1+dc.table$dx, dc.table$only.sh.1+dc.table$dy, labels=dc.table$d,
+ pos=dc.table$pos, cex=1.5)
abline(v=c(1804, 1835), lty=2, lwd=3)
arrows(x0=1821, y0=.25, x1=1826, y1=.28, angle=10)
axis(1, lwd=4.5)
axis(2, lwd=4.5)
dev.off()
После этого оставалось только снова закрасить точки черным и я получил то, с чего начал рассказ -- итоговую картинку.
png("flickr_plot.5.png", width=750, height=750)
par(cex.lab=2, cex.axis=2, cex.main=2.2, mar=c(5,5,4,2), lwd=3)
plot(dc.table$sty.1, dc.table$only.sh.1, pch=dc.table$shape, bg="black", cex=3,
+ xlim=c(1755,1860), frame=F, main="A", xlab="Years", ylab="Some mystery quotient")
text(dc.table$sty.1+dc.table$dx, dc.table$only.sh.1+dc.table$dy, labels=dc.table$d,
+ pos=dc.table$pos, cex=1.5)
abline(v=c(1804, 1835), lty=2, lwd=3)
arrows(x0=1821, y0=.25, x1=1826, y1=.28, angle=10)
axis(1, lwd=4.5)
axis(2, lwd=4.5)
dev.off()
P. S. 2/306/-90/216.
This entry was originally posted at
http://kouprianov.dreamwidth.org/307191.html Comment wherever you wish.