我正在研究Power BI项目,并且正在制作一些R视觉效果。视觉效果之一是散点图。每个点都有一个分类值(“是”,“否”)。我选择通过形状表示这些类别。有时,用户会以这样的方式查询数据,即每个点只有一个类别。我希望我的“是”形状仅对“是”值保持唯一,而我的“否”形状仅对“否”值保持唯一。
我的代码:
ggplot(data = dataset) +
geom_point(data = dataset, aes(x= value1 y=value2, shape = YesNo_column) +
scale_shape_manual(name="", values = c(20, 0))
我希望“是”点始终具有形状“ 20”,而“否”点始终具有形状“ 0”。如果用户查询数据仅显示“否”点,则我的代码将为这些点分配形状“ 20”,而不是形状“ 0”。
编辑:我刚刚制作了一些示例数据来显示我的问题:
query1 <- mtcars[mtcars$cyl == 4 | mtcars$cyl == 6,]
query1$YesNo_column <- "blah"
query1[query1$cyl==4,]$YesNo_column <- "Yes"
query1[query1$cyl==6,]$YesNo_column <- "No"
ggplot(query1, aes(x=mpg, y=hp, shape=YesNo_column)) +
geom_point()+
scale_shape_manual(name="",values = c(20, 0))
query2 <- query1[query1$YesNo_column == "Yes",]
ggplot(query2, aes(x=mpg, y=hp, shape=YesNo_column)) +
geom_point()+
scale_shape_manual(name="",values = c(20, 0))
如您所见,形状并不固定为值。
答案 0 :(得分:1)
确保将您的yes
和no
编码为一个因子,并简单地使用DROP = FALSE
library(tidyverse)
mydata <- tibble(
x = rnorm(20, 1.0, 0.3),
y = rnorm(20, 1.5, 0.4),
response = sample(c("yes", "no"), replace = TRUE, size = 20)
) %>%
mutate(response = as.factor(response))
ggplot(mydata, aes(x = x, y = y, shape = response)) +
geom_point() +
scale_shape_manual(name="", values = c(20, 0), drop = FALSE)
mydata %>%
filter(response == "yes") %>%
ggplot(aes(x = x, y = y, shape = response)) +
geom_point() +
scale_shape_manual(name="", values = c(20, 0), drop = FALSE)