在r中创建一个ggplot

时间:2016-08-24 13:37:29

标签: r ggplot2

我尝试根据这些数据创建一个ggplot:

enter image description here

很抱歉,但我无法从数据中提供更多信息。

我从效果包的效果输出中得到了这个。

现在我想绘制一个ggplot,它将prob.X1的概率与prob.X6结合起来。它应该是这样的:

enter image description here

这就是我已经尝试过的:

Eff.1 <- Effect(focal.predictors = "AvRating", mod= V6)
Eff.df <- data.frame((Eff.1))

此代码从顶部提供图表。

有了这个我试着得到ggplot:

ggplot(Eff.df) + geom_area(aes(x=AvRating, y=prob.X1))

但这只会产生第一列和第二列的情节。

我尝试添加更多这样的geom(这不起作用):

ggplot(Eff.df) + geom_area(aes(x=AvRating, y=prob.X1)) + geom_area(aes(x=AvRating, y=prob.X2))

我试图连接列并绘制这个(这不起作用):

Eff.dfx <- as.numeric((rbind(Eff.df$prob.X1,Eff.df$prob.X2, Eff.df$prob.X3, Eff.df$prob.X4,Eff.df$prob.X5,Eff.df$prob.X6)))
Eff.dfAv <- as.numeric(rep(Eff.df$AvRating,6))
ggplot(Eff.df) + geom_area(aes(x=Eff.dfAv, y= Eff.dfx))

你能帮我解决这个ggplot的代码吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您实际提供人们可以用来实际帮助您的MWE或数据,这总是有帮助的。既然你没有,这里有一些你可能需要的格式数据。您需要reshape2::melt将您的数据(目前的图片,比发布数据更容易)转换为正确的格式。

你可能不应该使用评级之间的联系,因为这意味着你有关于他们之间的价值的信息

library(dplyr)

usableData <-
  data.frame(
    avgRating = factor(rep(0:5, each = 6))
    , value = factor(rep(1:6, 6))
    , count = rnorm(36, rep(seq(300,40, length.out = 6)), 10)
  ) %>%
  group_by(avgRating) %>%
  mutate(prob = count / sum(count))


ggplot(usableData
       , aes(x = avgRating
             , y = prob
             , fill = value)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  scale_fill_brewer(direction = -1)

enter image description here

如果你确实有充分的理由使用连接线,你应该能够做到这样的事情:

usableData %>%
  ungroup() %>%
  group_by(avgRating) %>%
  mutate(cumsum = cumsum(count)
         , cumProb = cumsum / sum(count)
         , cumProbPre = c(0,cumsum[-length(cumsum)]) / sum(count)
         ) %>%
  ggplot(aes(x = as.numeric(avgRating)
             , ymin = cumProbPre
             , ymax = cumProb
             , fill = value
             )) +
  geom_ribbon() +
  theme_minimal() +
  scale_fill_brewer(direction = -1)

enter image description here