来自?par
“线型规范”的帮助文件(加粗以示强调):
线型可以通过给一个小的索引来指定
内置线型表(1 = 实线,2 = 虚线等,请参阅lty
上)或直接作为线路开/关延伸的长度。
这是通过偶数(最多八个)的字符串来完成的
字符,即non-zero(十六进制)数字给出
字符串中连续位置的长度。例如,
细绳"33"
指定三个单位打开,后跟三个单位关闭,"3313"
指定三个单位打开,然后三个单位关闭,然后指定
一开,最后三关。这里的“单位”是(在大多数设备上)
正比于lwd
, 与lwd = 1
以像素或点为单位或
1/96 英寸。
这表明,如果我们指定适当变化的线型和线宽(例如,较粗的线的宽度是较细的线的两倍,开关延伸的长度是一半),我们可以在不同的条件下实现看似相同的虚线长度的预期效果。线宽。
Note:线型规范中允许的字符是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,据我所知,图形文件设备的选择很重要。破折号整齐地对齐vector基于设备,但不一定用于bitmap基于的:
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 中解决这个问题的东西。不过,如果您需要其中一种位图格式,但最优先考虑的是相同间距的破折号,则可以首先将绘图输出到一种基于矢量的设备,然后从一种文件格式转换为另一种文件格式。