我在ggplot中看到有关changing line width的几篇文章。答案虽然对OP有用且有效,但可以更改 size 行。也就是说,ggplot似乎将线视为一系列单位,并且大小会增加每个单位的长度和宽度,从而使其他调整变得更粗糙。
我希望有一种方法可以使线条更宽(更厚),同时又不影响长度和虚线的比例。
我从https://cran.r-project.org/web/packages/ggplot2/vignettes/ggplot2-specs.html借了一些代码来说明我的意思:
library(ggplot2)
#A simple plot with manually set dashes.
#The first numeral is units of dash length, the second units in the gap in hexadecimal.
lty <- c("11", "18", "1f", "81", "88", "8f", "f1", "f8", "ff")
linetypes <- data.frame(y = seq_along(lty), lty = lty)
ggplot(linetypes, aes(0, y)) +
geom_segment(aes(xend = 5, yend = y, linetype = lty)) +
scale_linetype_identity() +
geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) +
scale_x_continuous(NULL, breaks = NULL) +
scale_y_reverse(NULL, breaks = NULL)
#Altering the size changes the line width AND dash spacing.
ggplot(linetypes, aes(0, y)) +
geom_segment(aes(xend = 5, yend = y, linetype = lty),
size = 3) +
scale_linetype_identity() +
geom_text(aes(label = lty), hjust = 0, nudge_y = 0.3) +
scale_x_continuous(NULL, breaks = NULL) +
scale_y_reverse(NULL, breaks = NULL)
基本上,我想要的是带有较细和精细调整间隙的粗线。我认为这是用另一种方法问的同一问题:是否有一种方法可以使全部为“虚线”的线条的宽度不同,但虚线的相对位置不同?像这样(我完全伪造):
答案 0 :(得分:2)
来自{“ {1}}”帮助文件中的“线型规格”(加粗为强调):
可以通过给一个小索引指定行类型 内置线型表(1 =实线,2 =虚线等,请参见
?par
以上)或直接作为线段的开/关长度。 这是用偶数(最多八个)的字符串完成的 字符,即非零(十六进制)数字, 字符串中连续位置的长度。例如, 字符串lty
指定打开三个单位,然后关闭三个单位,"33"
指定先打开三个单位,然后关闭三个单位,然后再指定 一上,最后三下。这里的“单位”(在大多数设备上) 与"3313"
成正比,与lwd
成比例的像素或点 1/96英寸。
这表明,如果我们指定线型和线宽适当变化(例如,较粗的线是较细的线的两倍,而开关的长度是原来的一半),则可以达到看似相同的破折号的预期效果不同线宽的长度。
注意:线型规范中允许使用的字符为lwd = 1
,这表示可能的最短拉伸长度为1个单位,而最长为15个单位。这限制了可以创建的不同行的数量。
它可以与基本的R绘图功能一起使用:
c(1:9, "A":"F"))
对于ggplot2,据我所知,图形文件设备的选择很重要。破折号与基于 vector 的设备完全对齐,但不一定与基于 bitmap 的设备对齐:
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中没有找到任何可以直接解决此问题的方法。不过,如果您需要一种位图格式,但等距的短划线是头等大事,则可以先将绘图输出到基于矢量的设备之一,然后再从一种文件格式转换为另一种文件格式。