首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >柱状图柱状图的底部有额外的线条

柱状图柱状图的底部有额外的线条
EN

Stack Overflow用户
提问于 2018-07-07 16:04:11
回答 1查看 215关注 0票数 0

我有两个主要的问题需要一些帮助来解决。1.)在我的列的底部有一些奇怪的线条,我不知道如何去掉它们。2.)当我绘制图表时,我遇到了与列重叠的情况。(我认为这与position_dodge(width= XXX)有关,但不完全确定)。

附上了一个例子情节的图像,主要是因为我不确定如何描述在情节的基础上正在发生的事情。

正在使用以下代码。

代码语言:javascript
复制
where_2 <- where %>% 
  group_by_("gender", "radio") %>% 
  summarise(count = n()) %>% 
  mutate(perc = (perc = (count / sum(count) * 100)))

gg <- ggplot(where_2, aes_string(x = names(where_2[1]), y = where_2$perc, fill = "radio"))
gg <- gg + geom_bar(aes(y = (..count..) / sum(..count..))) 
gg <-gg + geom_bar(position = position_dodge(.5),stat = "identity", width = .75)

#gg <- gg + scale_y_continuous(labels = scales::percent)
gg <- gg + xlab(paste0(lab5[2, title]))
gg <- gg + scale_fill_discrete(labels = c("Yes", "No"))
print(gg)

在过去的4天里,我一直在为这个问题奔跑,如果有任何帮助,我将不胜感激。

代码语言:javascript
复制
place   gender  Radio
1   Male    No
1   Female  Yes
1   Male    No
1   Female  Yes
1   Male    Yes
1   Male    Yes
1   Female  Yes
1   Female  Yes
1   Male    Yes
1   Female  No
1   Male    Yes
1   Male    Yes
1   Male    No
1   Female  No
1   Female  Yes
1   Female  Yes
1   Female  No
1   Male    Yes
1   Female  No
1   Female  Yes
1   Female  No
1   Female  Yes
1   Male    No
1   Male    No
1   Female  No
1   Male    No
1   Female  No
1   Female  No
1   Female  No
1   Male    Yes
1   Female  No
1   Female  No
1   Female  Yes
1   Male    No
1   Male    Yes
1   Female  No
2   Male    Yes
2   Male    Yes
2   Female  No
2   Female  No
2   Male    Yes
2   Female  No
2   Male    No
2   Male    Yes
2   Female  No
2   Female  No
2   Female  No
2   Male    No
2   Female  No
2   Male    No
2   Female  Yes
2   Female  Yes
2   Male    Yes
2   Male    No
2   Male    Yes
3   Female  No
3   Male    Yes
3   Female  No
3   Male    No
3   Male    Yes
3   Female  No
3   Female  Yes
3   Male    No
3   Male    Yes
3   Female  Yes
3   Male    No
3   Female  No
3   Female  Yes
3   Female  No
3   Female  Yes
3   Female  No
3   Male    Yes
3   Female  No
3   Female  No
4   Male    Yes
4   Female  No
4   Female  Yes
4   Female  Yes
4   Male    Yes
4   Female  No
4   Female  No
4   Male    No
4   Female  No
4   Female  No
4   Female  No
4   Male    Yes
4   Male    Yes
4   Female  Yes
4   Female  No
4   Male    Yes
4   Male    Yes
4   Male    Yes
4   Female  No
4   Female  No
4   Female  No
EN

回答 1

Stack Overflow用户

发布于 2018-07-09 17:30:23

试试这个:

代码语言:javascript
复制
gg <- ggplot(where2, 
             aes(x = gender, y = perc, fill = Radio)) + 
  geom_col(position = "dodge", width = .75)

print(gg)

解释如下:

你说的对,“脚”确实是由geom_bar(aes(y = (..count..) / sum(..count..)))引起的。我不知道你为什么要把它放在第一位,但这就是为什么它创造了“脚”:

Good chart

代码语言:javascript
复制
p <- ggplot(where2, aes(x = gender, y = perc, fill = Radio))

p + geom_col(position = position_dodge(0.5), width = 0.75)

上面是你想要得到的图表(我假设)。geom_col()等同于geom_bar(stat = "identity"),但输入更少,所以我改用了它。

通常人们在position_dodge()width =中设置相同的值,这将避免重叠的外观。我暂时保留了它,以便与下面的“脚”形成对比。

还要注意y轴上的值。它们的范围从0到60+。

坏图表

代码语言:javascript
复制
p + geom_bar(aes(y = (..count..) / sum(..count..)))

上面是“脚”的图表,现在占据了整个地块的高度。在这里,..count..返回每种性别和广播组合的行数,而sum(..count..)返回数据框中的总行数。数据框where2有4行,每行对应一种组合,因此与每个条形关联的y值为0.25,每个性别的两个条形的堆叠高度为0.5。

我认为这是一个糟糕的图表,因为可视化是无用的。当您已经自己计算了数据集中的行数(从wherewhere2)时,ggplot就没有必要再计算一次。

好图表+坏图表=奇怪的图表

代码语言:javascript
复制
p + 
  geom_col(position = position_dodge(0.5), width = 0.75) +
  geom_bar(aes(y = (..count..) / sum(..count..)))

上图是两个层的组合图表。现在,坏图表的条形一直被挤压到底部,因为它们的总高度只有0.5,而好图表的条形一直延伸到60+。

使用的数据:

代码语言:javascript
复制
> dput(where)
structure(list(place = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L), gender = structure(c(2L, 1L, 2L, 1L, 
2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 
2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 
2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 
1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 
1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L), .Label = c("Female", 
"Male"), class = "factor"), Radio = structure(c(1L, 2L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 
2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 
1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L), .Label = c("No", 
"Yes"), class = "factor")), .Names = c("place", "gender", "Radio"
), class = "data.frame", row.names = c(NA, -95L))

where2 <- where %>% 
  group_by(gender, Radio) %>% 
  summarise(count = n()) %>% 
  mutate(perc = (perc = (count / sum(count) * 100))) 

> where2
# A tibble: 4 x 4
# Groups: gender [2]
  gender Radio  count  perc
  <fctr> <fctr> <int> <dbl>
1 Female No        37  67.3
2 Female Yes       18  32.7
3 Male   No        15  37.5
4 Male   Yes       25  62.5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51221206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档