R:ggplot2 - 标签像模糊一样打印每一行,而不仅仅是值的总和
R: ggplot2 - Label prints every row like a blur, instead of just the sum of the values
我只需要将每个柱顶部的 "sessions" 的总和。但我只是明白了:
这是我的代码:
ggplot(VisitasData, aes(factor(Fuentes), sessions, fill = Fuentes)) +
geom_bar(stat="identity", position = "dodge") +
geom_text(aes(label = comma(sessions)), position=position_dodge(width=0.9), vjust=-0.25) +
scale_fill_manual(breaks = c("0", "1", "3", "6", "9"),
labels = c("Directo", "Email", "References",
"SEO", "Social Media"),
values = c("#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2"))
如果没有看到您的数据,我无法确定,但这似乎是正在发生的事情,并用一些虚假数据进行了说明:
# Fake data
set.seed(23)
dat = data.frame(cat=rep(LETTERS[1:3], each=4), value=sample(100:1000, 12))
cat value
1 A 619
2 A 300
3 A 398
4 A 738
5 B 835
6 B 479
7 B 962
8 B 974
9 C 850
10 C 988
11 C 871
12 C 724
# Analogous to your plot
ggplot(dat, aes(cat, value, fill=cat)) +
geom_bar(stat="identity", position="dodge", alpha=0.25) +
geom_text(aes(label=value))
上面发生的事情是 ggplot
为每一行数据添加了一个栏。结果,由于 alpha=0.25
参数使条形图透明,因此有四个条形图被过度绘制,如您所见。 ggplot
这样做是因为 stat="identity"
告诉 ggplot
按原样获取数据而不应用任何转换。但是如果没有 stat="identity"
,geom_bar
会抛出错误,因为 geom_bar
的默认 stat
是 stat="bin"
(意思是创建行计数的直方图),您可以不要将变量映射到 y
并使用 stat="bin"
(直方图不是您想要的)。
相反,您需要告诉 ggplot
首先对每个类别中的值求和,然后绘制总和。例如:
ggplot(dat, aes(cat, value, fill=cat)) +
stat_summary(fun.y=sum, geom="bar", position="dodge") +
stat_summary(fun.y=sum, geom="text", aes(label=..y..))
您还可以在 ggplot
之外创建一个摘要数据框,然后将摘要数据框提供给 ggplot
。然后你会使用 geom_bar(stat="identity")
来获得你想要的条形图。
我只需要将每个柱顶部的 "sessions" 的总和。但我只是明白了:
这是我的代码:
ggplot(VisitasData, aes(factor(Fuentes), sessions, fill = Fuentes)) +
geom_bar(stat="identity", position = "dodge") +
geom_text(aes(label = comma(sessions)), position=position_dodge(width=0.9), vjust=-0.25) +
scale_fill_manual(breaks = c("0", "1", "3", "6", "9"),
labels = c("Directo", "Email", "References",
"SEO", "Social Media"),
values = c("#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2"))
如果没有看到您的数据,我无法确定,但这似乎是正在发生的事情,并用一些虚假数据进行了说明:
# Fake data
set.seed(23)
dat = data.frame(cat=rep(LETTERS[1:3], each=4), value=sample(100:1000, 12))
cat value
1 A 619
2 A 300
3 A 398
4 A 738
5 B 835
6 B 479
7 B 962
8 B 974
9 C 850
10 C 988
11 C 871
12 C 724
# Analogous to your plot
ggplot(dat, aes(cat, value, fill=cat)) +
geom_bar(stat="identity", position="dodge", alpha=0.25) +
geom_text(aes(label=value))
上面发生的事情是 ggplot
为每一行数据添加了一个栏。结果,由于 alpha=0.25
参数使条形图透明,因此有四个条形图被过度绘制,如您所见。 ggplot
这样做是因为 stat="identity"
告诉 ggplot
按原样获取数据而不应用任何转换。但是如果没有 stat="identity"
,geom_bar
会抛出错误,因为 geom_bar
的默认 stat
是 stat="bin"
(意思是创建行计数的直方图),您可以不要将变量映射到 y
并使用 stat="bin"
(直方图不是您想要的)。
相反,您需要告诉 ggplot
首先对每个类别中的值求和,然后绘制总和。例如:
ggplot(dat, aes(cat, value, fill=cat)) +
stat_summary(fun.y=sum, geom="bar", position="dodge") +
stat_summary(fun.y=sum, geom="text", aes(label=..y..))
您还可以在 ggplot
之外创建一个摘要数据框,然后将摘要数据框提供给 ggplot
。然后你会使用 geom_bar(stat="identity")
来获得你想要的条形图。