Два дня (с перерывами) рисовал, высунув язык...

Feb 26, 2015 21:56


Писал тут недавно про то, как считали, а потом рисовали. Вот, что получилось:


Она пока не идеальна, но уже довольно близка к тому, что хотелось бы видеть. Теперь два слова о том, как это получилось.

Надо сказать, что отрисовка по умолчанию была нечитабельна -- надписи наползали друг на друга и на точки.

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.

r, инфографика

Previous post Next post
Up