Ответ 1
Из файла справки ?par
для "Спецификация типа линии" (выделено жирным шрифтом для акцента):
Типы линий могут быть либо определены, давая индекс в небольшой встроенной таблицы типов линий (1 = твердые, 2 = пунктирными и т.д., см
lty
выше) или непосредственно в качестве длин включения/выключения отрезков линии. Это делается с помощью строки четного числа (до восьми) символов, а именно ненулевых (шестнадцатеричных) цифр, которые дают длины в последовательных позициях в строке. Например, строка"33"
указывает три единицы, за которыми следуют три, а"3313"
указывает три единицы, за которыми следуют три, а затем один на и, наконец, три. "Единицы здесь (на большинстве устройств) пропорциональныlwd
, аlwd = 1
- в пикселях или точках или 1/96 дюйма.
Это говорит о том, что если мы укажем типы линий и ширину линии, которые будут меняться соответствующим образом (например, более толстая линия в два раза шире, чем более тонкая линия, причем длительность включения-выключения составляет половину длины), мы можем достичь желаемого эффекта, казалось бы, идентичных длин деления при разных ширины линий.
Примечание: допустимыми символами в спецификации типа линии являются c(1:9, "A":"F"))
, что означает, что кратчайшая длина растяжения составляет 1 единицу, а самая длинная - 15 единиц. Это ограничивает количество различных строк, которые могут быть созданы.
Он работает так, как ожидалось, с базовыми функциями построения R:
plot.new()
plot.window(xlim=c(0, 5), ylim=c(1, 3))
abline(h = 3, lty = "22", lwd = 8)
abline(h = 2, lty = "44", lwd = 4)
abline(h = 1, lty = "88", lwd = 2)
axis(2, at = 3:1, labels=c("22", "44", "88"), tick = FALSE, las = 1)
С другой стороны, для ggplot2, насколько мне удалось выяснить, выбор графического файлового устройства имеет значение. Черточки аккуратно выравниваются для векторных устройств, но не обязательно для битмап-основанных:
p <- ggplot(data.frame(y = seq(1, 3),
lty = c("11", "22", "44"),
lwd = c(8, 4, 2)),
aes(0, y)) +
geom_segment(aes(xend = 5, yend = y,
linetype = lty,
lwd = lwd)) +
geom_text(aes(label = lty), hjust = 0, nudge_x = -0.3) +
scale_linetype_identity() +
scale_size_identity() +
scale_x_continuous(NULL, breaks = NULL) +
scale_y_reverse(NULL, breaks = NULL, expand = c(0.5, 0))
# bitmap devices
ggsave("test.bmp", p + ggtitle(".bmp"))
ggsave("test.jpg", p + ggtitle(".jpg"))
ggsave("test.png", p + ggtitle(".png"))
ggsave("test.tiff", p + ggtitle(".tiff"))
ggsave("test.wmf", p + ggtitle(".wmf"))
# vector devices
ggsave("test.eps", p + ggtitle(".eps"))
ggsave("test.pdf", p + ggtitle(".pdf"))
ggsave("test.svg", p + ggtitle(".svg"))
Я не нашел ничего, что обращается к этому прямо в ggplot2. Тем не менее, если вам нужен один из форматов растровых изображений, но однотипные тире являются приоритетными, вы можете сначала выводить свои графики на одно из векторных устройств и затем конвертировать из одного формата файла в другой.