具有不同颜色异常值和几何文本编号标签的散点图
Scatterplot with different colored outliers and geom text number labels
我有一个包含多列的数据框。这是一个例子。
my_df <- data.frame(x = 1:5, y = c(50, 22, 15, 33, 49))
colnames(my_df) <- c("ID", "values")
my_df
我正在尝试制作一个散点图,其中此数据框的子集作为离群值具有与 non-outliers 不同的颜色。最重要的是,我还试图用它们的相关编号来标记这些异常值。
这是一个示例尝试:
ggplot(data=my_df, aes(x = seq(1, length(values)), y = my_df$values))+
geom_point(data = subset(my_df, values > 48), aes(color = "blue"))+
geom_point(data = subset(my_df, values < 24, aes(color = "red"))+
geom_text(data = subset(my_df, values > 48), aes(label = values))
geom_text 行代码提供了这个错误。
错误:美学必须是长度 1 或与数据相同 (2):颜色、x、y
其次,作为一种不同的尝试,我曾尝试使用 ifelse 通过不同的颜色分隔值 - 但是,我不知道如何用数字标记不同的颜色部分,甚至不知道用每种颜色的名称来标记不同的颜色部分部分。这是一个示例,但即使添加了 geom_text,或尝试添加图例,我打算制作的东西也不会成功。这是用作基准的代码:
ggplot(data=my_df, aes(x = seq(1, length(values)), y = my_df$values))+
geom_point(color = ifelse(my_df$values > 25, "red", "blue"))
如果有人能提供帮助,我将非常感激,因为我已经为此苦苦挣扎了一个多星期了。
编辑:下面提供的答案已经回答了我的问题。这是我生成的图的代码,包括图例标题和每个变量的名称,供以后查找此内容的人参考。
ggplot(my_df, aes(ID, values, color = factor(cut(values, c(0,24,48,Inf))))) +
geom_point(size=3) +
geom_text_repel(data = . %>% filter(values> 48), aes(label = values), show.legend = F)+
geom_text_repel(data = . %>% filter(values< 24), aes(label = values), show.legend = F)+
labs(title = "Beautiful Scatterplot", x = "ID", y = "Values", color = "Legend Title") +
scale_color_manual(labels = c("Below 24", "Between 24 and 48", "Above 48"), values = c("blue", "red", "purple"))
Example Answer Scatterplot
ggplot(data=my_df,aes(x=ID,y=values,label=ifelse(values>48,values,"")))+
geom_point(size=4,color = ifelse(my_df$values > 48, "red", "blue"))+
geom_text(vjust = 1.3,nudge_x = 0.15,aes(colour="red"),fontface = "bold",show.legend=F)
你可以试试
library(tidyverse)
library(ggrepel)
my_df %>%
mutate(col=case_when(values > 48 ~ 4,
values < 24 ~ 2,
T ~ 1)) %>%
ggplot(aes(ID, values, color = factor(col))) +
geom_point(size=3) +
geom_text_repel(data = . %>% filter(values> 48), aes(label = values)) +
scale_color_identity()
或仅使用 ggplot
ggplot(my_df, aes(ID, values, color = factor(cut(values, c(0,24,48,Inf))))) +
geom_point(size=3) +
geom_text_repel(data = . %>% filter(values> 48), aes(label = values), show.legend = F)
我有一个包含多列的数据框。这是一个例子。
my_df <- data.frame(x = 1:5, y = c(50, 22, 15, 33, 49))
colnames(my_df) <- c("ID", "values")
my_df
我正在尝试制作一个散点图,其中此数据框的子集作为离群值具有与 non-outliers 不同的颜色。最重要的是,我还试图用它们的相关编号来标记这些异常值。 这是一个示例尝试:
ggplot(data=my_df, aes(x = seq(1, length(values)), y = my_df$values))+
geom_point(data = subset(my_df, values > 48), aes(color = "blue"))+
geom_point(data = subset(my_df, values < 24, aes(color = "red"))+
geom_text(data = subset(my_df, values > 48), aes(label = values))
geom_text 行代码提供了这个错误。
错误:美学必须是长度 1 或与数据相同 (2):颜色、x、y
其次,作为一种不同的尝试,我曾尝试使用 ifelse 通过不同的颜色分隔值 - 但是,我不知道如何用数字标记不同的颜色部分,甚至不知道用每种颜色的名称来标记不同的颜色部分部分。这是一个示例,但即使添加了 geom_text,或尝试添加图例,我打算制作的东西也不会成功。这是用作基准的代码:
ggplot(data=my_df, aes(x = seq(1, length(values)), y = my_df$values))+
geom_point(color = ifelse(my_df$values > 25, "red", "blue"))
如果有人能提供帮助,我将非常感激,因为我已经为此苦苦挣扎了一个多星期了。
编辑:下面提供的答案已经回答了我的问题。这是我生成的图的代码,包括图例标题和每个变量的名称,供以后查找此内容的人参考。
ggplot(my_df, aes(ID, values, color = factor(cut(values, c(0,24,48,Inf))))) +
geom_point(size=3) +
geom_text_repel(data = . %>% filter(values> 48), aes(label = values), show.legend = F)+
geom_text_repel(data = . %>% filter(values< 24), aes(label = values), show.legend = F)+
labs(title = "Beautiful Scatterplot", x = "ID", y = "Values", color = "Legend Title") +
scale_color_manual(labels = c("Below 24", "Between 24 and 48", "Above 48"), values = c("blue", "red", "purple"))
Example Answer Scatterplot
ggplot(data=my_df,aes(x=ID,y=values,label=ifelse(values>48,values,"")))+
geom_point(size=4,color = ifelse(my_df$values > 48, "red", "blue"))+
geom_text(vjust = 1.3,nudge_x = 0.15,aes(colour="red"),fontface = "bold",show.legend=F)
你可以试试
library(tidyverse)
library(ggrepel)
my_df %>%
mutate(col=case_when(values > 48 ~ 4,
values < 24 ~ 2,
T ~ 1)) %>%
ggplot(aes(ID, values, color = factor(col))) +
geom_point(size=3) +
geom_text_repel(data = . %>% filter(values> 48), aes(label = values)) +
scale_color_identity()
或仅使用 ggplot
ggplot(my_df, aes(ID, values, color = factor(cut(values, c(0,24,48,Inf))))) +
geom_point(size=3) +
geom_text_repel(data = . %>% filter(values> 48), aes(label = values), show.legend = F)