我现在有一个散点图。每种颜色代表一个分类组,每组具有x轴上的一系列值。分类变量的范围之间不应该有任何重叠。但是,由于散点的厚度,看起来有重叠。所以,我想绘制一条线来连接组的最大点和相邻组的最小点,这样只要该线没有负斜率,它就可以表明每个分类变量之间没有重叠
我不知道如何使用geom_line()连接两个点,其中y坐标是一个分类变量。是否有可能这样做?
任何帮助将不胜感激!!!
答案 0 :(得分:1)
lineend =
的{{1}}参数,否则请忽略此答案。 geom_line
需要注意的是# generate dummy data
df <- data.frame(xvals = runif(1000, 0, 1))
# these categories were chosen to line up
# with tick marks to show they don't overlap
df$cats <- cut(df$xvals, c(0, .25, .625, 1)))
ggplot(df, aes(xvals, cats, colour = cats)) +
geom_line(size = 3)
有一个lineend =
参数。默认值为geom_line
,因此线条完全按照您希望的位置结束并对抗事物,但有时候看起来不正确。在这种情况下,其他选项会导致视觉重叠,如网格线所示。
答案 1 :(得分:1)
听起来你想要geom_segment
而不是geom_line
。您需要将数据汇总到具有要绘制点的新数据框中。我调整了Brian的示例数据并使用dplyr
:
# sample data
df <- data.frame(xvals = runif(50, 0, 1))
df$cats <- cut(df$xvals, c(0, .25, .625, 1))
# aggregation
library(dplyr)
df_summ = df %>% group_by(cats) %>%
summarize(min = min(xvals), max = max(xvals)) %>%
mutate(adj_max = lead(max),
adj_min = lead(min),
adj_cat = lead(cats))
# plot
ggplot(df, aes(xvals, cats, colour = cats)) +
geom_point() +
geom_segment(data = df_summ, aes(
x = max,
xend = adj_min,
y = cats,
yend = adj_cat
))
您可以将这些线段保持为上一类别,或者将它们设置为中性色,这样它们就不会脱颖而出。