我尝试根据这些数据创建一个ggplot:
很抱歉,但我无法从数据中提供更多信息。
我从效果包的效果输出中得到了这个。
现在我想绘制一个ggplot,它将prob.X1的概率与prob.X6结合起来。它应该是这样的:
这就是我已经尝试过的:
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的代码吗?
非常感谢。
答案 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)
如果你确实有充分的理由使用连接线,你应该能够做到这样的事情:
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)