R-在ggplot2

时间:2017-07-27 23:28:56

标签: r ggplot2

我现在有一个散点图。每种颜色代表一个分类组,每组具有x轴上的一系列值。分类变量的范围之间不应该有任何重叠。但是,由于散点的厚度,看起来有重叠。所以,我想绘制一条线来连接组的最大点和相邻组的最小点,这样只要该线没有负斜率,它就可以表明每个分类变量之间没有重叠

我不知道如何使用geom_line()连接两个点,其中y坐标是一个分类变量。是否有可能这样做?

任何帮助将不胜感激!!!

enter image description here

2 个答案:

答案 0 :(得分:1)

我的阅读理解失败了,所以我误解了这个问题。除非您想了解lineend =的{​​{1}}参数,否则请忽略此答案。

geom_line

enter image description here

需要注意的是# 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,因此线条完全按照您希望的位置结束并对抗事物,但有时候看起来不正确。在这种情况下,其他选项会导致视觉重叠,如网格线所示。

buttenter image description here

lineend = "square"enter image description here

答案 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
    ))

enter image description here

您可以将这些线段保持为上一类别,或者将它们设置为中性色,这样它们就不会脱颖而出。