我从 ggplot 中看到一些非常奇怪(且不受欢迎)的行为。我使用以下代码生成沿单个路径具有不同颜色段的绘图。
library(data.table)
library(ggplot2)
testData = fread("test_data.tsv")
ggplot(testData, aes(X, Y, color = Color, group = 1)) +
geom_path(size = 1.5) + scale_color_identity()
Run Code Online (Sandbox Code Playgroud)
(“test_data.tsv”中的数据可以在此 Pastebin中找到。)
正如你所看到的,边缘非常模糊(或者模糊,或者锯齿状,或者无论你想怎么称呼它们),我似乎无法修复它们。我尝试过以更高的 dpi 或其他图形格式(例如 pdf)导出,但没有任何效果。
每个点似乎都对齐以连接到其邻居,但实际的连接并不顺利。我认为这是使用“group = 1”参数来防止 ggplot 将所有类似颜色的区域连接在一起的产物。但是,正是出于这个原因,我无法更改该选项。
是否有我可以实施的解决此问题的方法,或者我此时是否遇到了 ggplot 的限制?
这与拥有如此多的数据点和(相对)粗的线有关 - 所以你的绘图代码没有问题。如果您使用较小的 值来检查数据size,您不会得到“模糊”的外观,但更难以可视化细线:
ggplot(testData, aes(X, Y, color = Color, group=1)) +
geom_path(size=0.5) + scale_color_identity()
Run Code Online (Sandbox Code Playgroud)
解决方法是使用lineend=...参数 ingeom_path()来平滑点连接的位置。直到线尺寸设置得相当大(例如,大于 1)之前,这根本没有太大影响。默认值是lineend="butt"在该点绘制硬边。您要在此处使用的选项是lineend="round"提供圆角边缘的选项。它看起来是这样的:
ggplot(testData, aes(X, Y, color = Color, group=1)) +
geom_path(size=1.5, lineend = "round") + scale_color_identity()
Run Code Online (Sandbox Code Playgroud)
为了更好地了解其工作原理,我们来看一个如下所示的示例数据集。首先,这是使用默认值 ( ) 时的绘图lineend="butt":
set.seed(8675309)
df <- data.frame(x=1:20, y=sample(-50:50, size=20, replace=T), col = sample(LETTERS[1:2], size=20, replace=T))
ggplot(df, aes(x,y, color=col, group=1)) +
geom_path(size=5, lineend="butt", alpha=0.8, show.legend = FALSE) +
theme_light()
Run Code Online (Sandbox Code Playgroud)
现在您设置时的区别如下lineend="round":
ggplot(df, aes(x,y, color=col, group=1)) +
geom_path(size=5, lineend="round", alpha=0.8, show.legend = FALSE) +
theme_light()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |