如何将两个重叠的图形与ggplot2混合

时间:2016-07-12 19:29:12

标签: r ggplot2

使用ggplot2,如何混合两个图形?如果我将两组数据映射到数据上,则第二组数据将覆盖第一组数据。有没有办法混合两个图形。我已经把alpha值尽可能低了。任何较低的,我都看不到个别点。

demanalyze <- function(infocode, n = 1){
    infoname <- filter(infolookup, column_name == infocode)$description
    infocolumn <- as.vector(as.matrix(mydata[infocode]))
    ggplot(mydata) +
    aes(x = infocolumn) +
    ggtitle(infoname) +
    xlab(infoname) +
    ylab("Fraction of votes each canidate recieved") +
    xlab(infoname) +
    geom_point(aes(y = sanders_vote_fraction, colour = "Bernie Sanders"), size=I(2)) +#, color = alpha("blue",0.02), size=I(1)) +
    stat_smooth(aes(y = sanders_vote_fraction), method = "lm", formula = y ~ poly(x, n), size = 1, color = "darkblue", se = F) +
    geom_point(aes(y = clinton_vote_fraction, colour = "Hillary Clinton"), size=I(2)) +#, color = alpha("red",0.02), size=I(1)) +
    stat_smooth(aes(y = clinton_vote_fraction), method = "lm", formula = y ~ poly(x, n), size = 1, color = "darkred", se = F) +
    scale_colour_manual("", 
        values = c("Bernie Sanders" = alpha("blue",0.005), "Hillary Clinton" = alpha("red",0.005))
    ) +
    guides(colour = guide_legend(override.aes = list(alpha = 1)))
}

通过混合,我的意思是在同一个地方有一个红点和一个蓝点,它应该显示为紫色。 enter image description here

1 个答案:

答案 0 :(得分:1)

观察情节,我的猜测是问题是相互叠加的红色堆叠,阻挡下面的蓝色。我认为您可能需要在图表上随机化分层,这需要生成单个data.frame。或者,如果希拉里+伯尼总是等于1,你可能只能绘制它。如果他们没有,并且你不想丢失太多信息,你可以只绘制一个(希拉里)/(伯尼+希拉里)的度量标准。

示例:

geom_point(aes(y = clinton_vote_fraction / ( clinton_vote_fraction + sanders_vote_fraction)
           , colour = "Clinton Share"), size=I(2))

以下是熔化方法的一个例子:

library(dplyr)
library(reshape2)
df <-
  data.frame(
    metric = rnorm(1000)
    , Clinton = rnorm(1000, 48, 10)
  ) %>%
  mutate(Sanders = 100 - Clinton - rnorm(4))


meltDF <-
  melt(df, "metric"
       , variable.name = "Candidate"
       , value.name = "Vote Share")

ggplot(meltDF %>%
       arrange(sample(1:nrow(.)))
       , aes(x = metric
             , y = `Vote Share`
             , col = Candidate)) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(se = FALSE, alpha = 1, show.legend = FALSE) +
scale_colour_manual("", 
                    values = c("Clinton" = "darkblue"
                               , "Sanders" = "red3")
) +
theme_minimal()

enter image description here