我想为geom_point
电话选择三种形状之一,如下所示:
function shapen(pt) {
if (pt$x < 10) {
return(1);
} else if (pt$y > 10 & pt$y < 22) {
return(2);
} else {
return(3);
}
}
p <- p + geom_point(data=rows, aes(x+bh$x,y+bh$y), shape=shapen)
但那不太合适 - 我如何检查数据行上'x'的值来确定三个或四个形状中的一个?
答案 0 :(得分:2)
您需要在shape
主题映射中加入aes
。然后可以使用scale_shape_manual
:
library(ggplot2)
str(mtcars[,c("wt", "mpg", "gear")])
ggplot(mtcars, aes(wt, mpg)) +
geom_point(aes(shape = as.factor(gear))) +
scale_shape_manual(values = c("4"=1, "3"=2, "5"=4))
您还可以预先计算形状:
library(tidyverse)
mtcars %>%
mutate(myshape = case_when(
gear >= 5 ~ 1,
between(gear, 2, 4) ~ 2,
TRUE ~ 3
)) %>%
ggplot(aes(wt, mpg)) +
geom_point(aes(shape = myshape)) +
scale_shape_identity()
答案 1 :(得分:0)
您可以定义一个在矢量上正常工作并返回形状数字矢量的函数:
shape_generator <- function(x) {
xtr <- 0
for (i in 1:length(x)) {
if (x[i] >= 5) {
xtr[i] = 1
} else if (x[i] > 2 & x[i] <= 4) {
xtr[i] = 2
} else {
xtr[i] = 3
}
}
return(xtr)
}
然后将其应用于geom_point的形状aes
:
ggplot(mtcars, aes(wt, mpg)) +
geom_point(aes(shape = shape_generator(wt))) +
theme_gray() +
scale_shape_identity()