【问题标题】:Can I change the width of bars in a circular barplot without then having gaps between bars in ggplot?我可以更改圆形条形图中条形的宽度,而 ggplot 中的条形之间没有间隙吗?
【发布时间】:2020-02-06 12:22:34
【问题描述】:

我有一些调查数据,其中有一个因素在采访中被提及的次数,然后是每个提及的正面、中性或负面的百分比。我想在圆形堆叠条形图中显示它,图中的每个部分都显示每个因素的响应百分比是正面/中性/负面,每个条形/片段的宽度表示与每个因素相关的响应数量因素。我已经能够使用 ggplot 和 coord_polar 来实现这一点,但我遇到的问题是圆圈周围的每个因素都是均匀分布的,在条形之间留有间隙。但我想知道是否有可能改变这些因素在圆圈周围的位置,从而产生一个“完整”的饼图,其中包含不同大小的段但它们之间没有间隙?

这是我到目前为止所做的;

data <- data.frame(Factor = c("One", "Two", "Three", "Four", "Five", "Six"),  
                   responses = c(23,16,8,16,17,20), 
                   positive = c(65.2,56.3,25,68.8,76.4,50),
                   neutral =c(30.4,12.5,25,12.5,17.6,20),
                   negative=c(4.3,31.3,50,18.8,5.9,30))

data2 <-melt(data, id=c("Factor","responses"))

data2$Factor <- factor(data2$Factor, levels = c("One", "Two", "Three", 
                                                "Four", "Five","Six"))


ggplot(data2) +
  geom_bar(aes(Factor, value, fill=variable, width=responses/25), stat="identity", alpha=0.5) +
  coord_polar() 

这是由谁制作的;

但是我想要更接近这个的东西,就填充圆圈的线段的宽度而言,然后让每个线段像上面一样堆叠;

任何帮助将不胜感激!谢谢

【问题讨论】:

  • 如果不将其扭曲成一个圆圈,该图将提供更多信息。我至少对简单的饼图还算满意,但径向分割也是一团糟。

标签: r ggplot2 stacked-area-chart radial


【解决方案1】:

使用width。您将其设置为 aes() 并忽略未使用的警告。

library("reshape2")
library("ggplot2")

data <- data.frame(Factor = c("One", "Two", "Three", "Four", "Five", "Six"),  
                   responses = c(23,16,8,16,17,20), 
                   positive = c(65.2,56.3,25,68.8,76.4,50),
                   neutral =c(30.4,12.5,25,12.5,17.6,20),
                   negative=c(4.3,31.3,50,18.8,5.9,30))

data2 <-melt(data, id=c("Factor","responses"))

data2$Factor <- factor(data2$Factor, levels = c("One", "Two", "Three", 
                                                "Four", "Five","Six"))


ggplot(data2) +
  geom_bar(aes(Factor, value, fill=variable), width = 1, stat="identity", alpha=0.5) +
  coord_polar() 

这是同一情节的更好版本。


ggplot(data2) +
  geom_bar(aes(Factor, value, fill=variable), stat="identity", alpha=0.5)

【讨论】:

  • 第一个图的唯一问题是,虽然所有的圆圈都是满的,但每个段的大小都是一样的,但我想知道你是否可以改变因子在绘制使它们不均匀分布,并且每个段的大小根据记录的响应数量而变化。但正如你所说,它可能更简单,因为我可以制作具有不同宽度条的条形图。不过还是谢谢。
  • ggplot(data2) + geom_bar(aes(Factor, value, fill=variable, width=responses/25), stat="identity", alpha=0.5)
  • 作为径向分段饼图,这基本上是一个糟糕的图。
  • 澄清一下,@alanocallaghan 是说情节很糟糕,因为径向分割意味着离圆外最远的类别具有夸张的大面积,因此看起来比例要高得多“积极”的反应比实际情况要好。他制作的堆积条形图在不扭曲相对比例的情况下显示了事物。
  • 谢谢,我确实理解并欣赏径向分割的缺陷,我明白为什么堆叠条形图更好地代表了该数据(我仍然很好奇是否可以改变段的位置) .但是是的,我现在会坚持使用条形图并调整条形的宽度以显示它们所代表的响应数量。
【解决方案2】:

远离分段饼图,我使用了这个例子R ggplot stacked geom_rect 创建一个堆积条形图,其中列的宽度表示每个因素的提及总数。

【讨论】: