library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point(size=4)
假设您拥有上述scatterplot
。如何指定>= 25
mpg的点数red
,between 20 and 25
green
和0-20
blue
?
这可以用ggplot
专门完成吗?
答案 0 :(得分:6)
您可以分两步完成此操作:
首先,定义应具有不同颜色的组;通过向数据框添加另一列或在aes
内添加。我会在这里使用aes
:
aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf)))
其次,通过指定手动颜色或填充比例:
scale_color_manual(values = c('blue', 'green', 'red'),
limits = c('(0,20]', '(20,25]', '(25,Inf]'))
指定要使用的颜色(values
)以及将它们分配给哪些标签(limits
);这些是cut
生成的分组的名称。
合在一起:
ggplot(mtcars) +
aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf))) +
geom_point(size = 4) +
scale_color_manual(values = c('blue', 'green', 'red'),
limits = c('(0,20]', '(20,25]', '(25,Inf]'))
您可以通过将分组作为单独的列添加到数据中,或通过提供guides
函数调用来改进图例标题:
guides(color = guide_legend(title = 'mpg range'))
答案 1 :(得分:2)
当然可以,尽管这种类型的工作可能最适合在ggplot()
之前使用您的数据框。您可以像这样使用ifelse()
:
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point(size = 4,
aes(color = ifelse(mpg > 25, "> 25",
ifelse(mpg > 20, "20-25", "< 20")))) +
scale_color_manual(values = c("> 25" = "red", "< 20" = "blue", "20-25" = "green"),
name = "MPG" )
您无需致电guides()
创建标题,您可以将其传递给name = ..
scale_color_manual()
参数