R ggplot2中两种不同颜色美学映射的不同调色板
我的问题非常类似于,也是一个问题。我有一个散点图(使用R ggplot2中两种不同颜色美学映射的不同调色板,r,colors,ggplot2,R,Colors,Ggplot2,我的问题非常类似于,也是一个问题。我有一个散点图(使用geom_point),使用特定的调色板,按因子着色。我正在使用stat\u smooth通过点绘制某些平滑线,按另一个因子分组。我希望这些线条使用不同的调色板 这是一本书。就做一个 currDT <- read.table("SO_data", sep = "|", header = TRUE, strip.white = TRUE) 希望这足够清楚。下面是一些示例代码: icorr_elec <- ggplot(currDT
geom_point
),使用特定的调色板,按因子着色。我正在使用stat\u smooth
通过点绘制某些平滑线,按另一个因子分组。我希望这些线条使用不同的调色板
这是一本书。就做一个
currDT <- read.table("SO_data", sep = "|", header = TRUE, strip.white = TRUE)
希望这足够清楚。下面是一些示例代码:
icorr_elec <- ggplot(currDT,
aes(x = EFP, y = SAPT), na.rm = TRUE) +
geom_point(aes(colour = Anion, shape = Cation), size = 3, alpha = 0.4) +
scale_colour_manual(values = my_col_scheme) +
stat_smooth(method = "lm", formula = y ~ x + 0, aes(linetype = Halide, colour = Halide),
alpha = 0.8, size = 0.5, level = 0) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"), labels = c("Halides", "Non-Halides"))
icorr\u elec我认为ggplot2
不会让您更改两次颜色并更新图例。我似乎记得读过这样一篇文章:在一个绘图中,你不能两次更改scale\u color\u manual
。我找不到那个网页,但这涉及到这个话题。我也尝试过在这篇文章中使用这些建议,但是没有用。可能是因为我们正在尝试混合geoms
(但这只是一个猜测)
我可以将回归线着色:
part1 <-
ggplot(currDT,
aes(x = EFP, y = SAPT), na.rm = TRUE) +
stat_smooth(method = "lm", formula = y ~ x + 0,
aes(linetype = Halide, colour = Halide),
alpha = 0.8, size = 0.5, level = 0) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"),
labels = c("Halides", "Non-Halides")) +
scale_color_manual(name = "", values = c("red", 'blue'),
labels = c("Halides", "Non-Halides"))
ggsave('part1.jpeg', part1)
第1部分您可以通过使用点的填充点标记并将其映射到填充
美学,同时保持线映射到颜色
美学,获得线和点的单独颜色映射。填充点标记是编号为21到25的标记(请参见pch)。下面是一个例子,改编@RichardErickson的代码:
ggplot(currDT, aes(x = EFP, y = SAPT), na.rm = TRUE) +
stat_smooth(method = "lm", formula = y ~ x + 0,
aes(linetype = Halide, colour = Halide),
alpha = 0.8, size = 0.5, level = 0) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"), labels = c("Halides", "Non-Halides")) +
geom_point(aes(fill = Anion, shape = Cation), size = 3, alpha = 0.4, colour="transparent") +
scale_colour_manual(values = c("blue", "red")) +
scale_fill_manual(values = my_col_scheme) +
scale_shape_manual(values=c(21,24)) +
guides(fill = guide_legend(override.aes = list(colour=my_col_scheme[1:8],
shape=15, size=3)),
shape = guide_legend(override.aes = list(shape=c(21,24), fill="black", size=3)),
colour = guide_legend(override.aes = list(linetype=c("dotdash", "F1"))),
linetype = FALSE)
以下是我所做的解释:
在geom_点
,将颜色
美感更改为填充
。另外,将color=“transparent”
放在aes
之外。这将消除边境点周围的边界。如果需要边框,请将其设置为您喜欢的任何边框颜色
在scale\u color\u manual
中,我已将颜色设置为蓝色和红色,但您当然可以将它们设置为您喜欢的任何颜色
添加scale\u fill\u manual
以使用fill
设置点的颜色
添加scale\u shape\u manual
并将值设置为21和24(分别为填充圆和三角形)李>
guides()
中的所有内容都是修改图例。我不知道为什么,但没有这些替代,填充和形状的图例是空白的。请注意,我已经为形状
图例设置了fill=“black”
,但它显示为灰色。我不知道为什么,但是没有fill=“somecolor”
的形状
图例是空白的。最后,我覆盖了颜色
图例,以便在颜色图例中包含线型,这使我能够消除冗余的线型
图例。我对这个传奇并不完全满意,但这是我能想到的最好的,而不必求助于特殊用途的Grob李>
注意:我将color=NA
更改为color=“transparent”
,因为color=NA
(在ggplot2的版本2中)会导致点完全消失,即使使用具有单独边框和填充颜色的点也是如此。感谢@aosmith for.为了完整性起见,现在使用ggnewscale
软件包可以很容易地为相同的美学效果添加两个音阶您介意添加一个吗?您的问题看起来很有趣,但我不想创建一个虚拟数据集来查看它。@RichardErickson谢谢您的关注,如果您需要更多信息,我很乐意提供,请告诉我。谢谢您的示例。仅供参考,我必须从sep=“|”
中删除空格。我不知道这是我的电脑还是其他错误(我现在在Mac电脑上)。另外,出于好奇,你从哪里得到这些数据?它是来自一种乐器吗?我从来没有见过用|作为分隔符。@RichardErickson没有,我只是用write.table
将data.table写入文本文件。我知道逗号和空格是更常见的分隔符,但它们有时会出现在数据中,尤其是字符/字符串类型中,而这是一个非常罕见的字符,因此我通常将其用作字段分隔符。我在下面给出了我的最佳尝试,但无法理解。祝你好运(顺便说一句,我也喜欢data.table
)。将正确颜色的卤化物/非卤化物图例打印在第一部分的正确位置,然后在禁用该图例、透明背景和阳离子和卤化物图例的情况下打印这两个图例,这样它们就不会与第一个图例重叠了?哇,感谢您的努力!是的,在我问这个问题之前,我基本上就是这样结束的;顺便问一下,ggplot2对线条使用了哪些颜色?它似乎没有使用my_colu\u scheme
@geryan你是在建议创建两个情节,然后一个一个地叠在另一个上面吗?这可以在R中完成吗?或者我们将看到一个外部的图像处理程序吗?@SamuelTan,是的,这是我的建议,但我用自己的一些代码尝试了它,但无法使它工作,对不起。是的。我忘了包括你的颜色代码。我正在更改它,但忘了重新添加。干得好!我对你为制作ggplot
而进行的大量黑客攻击印象深刻。我尝试使用fill,但没有意识到我还必须将颜色
更改为NA
。谢谢。大部分作品都是为了与传奇人物搏斗。如果不希望在点周围有边框,只需包含color=NA
。如果您不介意边框,您可以省略color=NA
并获得黑色边框,或者您可以将颜色设置为您喜欢的任何颜色。干杯!使用填充
而不是颜色
非常聪明。我不会在指南上玩得太久而得到我想要的传奇。这就行了。至少现在是这样,因为我总是对其他方法持开放态度。有趣的是,对于geom_point
使用fill
而不是color
仅当您同时指定shape
内部或外部时才有效
part2 <-
ggplot(currDT,
aes(x = EFP, y = SAPT), na.rm = TRUE) +
geom_point(aes(color = Anion, shape = Cation), size = 3, alpha = 0.4) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"),
labels =c("Halides", "Non-Halides")) +
scale_colour_manual(values = my_col_scheme)
ggsave('part2.jpeg', part2)
both <-
ggplot(currDT,
aes(x = EFP, y = SAPT), na.rm = TRUE) +
stat_smooth(method = "lm", formula = y ~ x + 0,
aes(linetype = Halide, colour = Halide),
alpha = 0.8, size = 0.5, level = 0) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"), labels = c("Halides", "Non-Halides")) +
geom_point(aes(color = Anion, shape = Cation), size = 3, alpha = 0.4) +
scale_colour_manual(values = my_col_scheme)
ggsave('both.jpeg', both)
ggplot(currDT, aes(x = EFP, y = SAPT), na.rm = TRUE) +
stat_smooth(method = "lm", formula = y ~ x + 0,
aes(linetype = Halide, colour = Halide),
alpha = 0.8, size = 0.5, level = 0) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"), labels = c("Halides", "Non-Halides")) +
geom_point(aes(fill = Anion, shape = Cation), size = 3, alpha = 0.4, colour="transparent") +
scale_colour_manual(values = c("blue", "red")) +
scale_fill_manual(values = my_col_scheme) +
scale_shape_manual(values=c(21,24)) +
guides(fill = guide_legend(override.aes = list(colour=my_col_scheme[1:8],
shape=15, size=3)),
shape = guide_legend(override.aes = list(shape=c(21,24), fill="black", size=3)),
colour = guide_legend(override.aes = list(linetype=c("dotdash", "F1"))),
linetype = FALSE)