【问题标题】:Create a stacked area plot or "stacked" circle plot创建堆积面积图或“堆积”圆形图
【发布时间】:2015-12-14 14:08:08
【问题描述】:

目的

创建堆积面积图或“堆积”圆形图(见图)。不需要饼图。

条形图的数据和代码

#Data set:
Numbers     16%
Frosts       2%
Doors        6%
Shelfs      10%
Earning     -3%

par(mai=c(2, 1, 1, 1), lwd=2)
barplot(as.numeric(c(16, 2, 6, 10, -3)), col = c("lightblue"), main="Bar plot",
        names.arg=c("Numbers","Frosts","Earning", "Doors","Shelfs"), xpd=TRUE, las=2, lwd=2, 
        axes=FALSE, axis.lty=1, cex.axis=1, cex.names=1, cex.main=1, ylim=c(-4, 18), xlim=c(0, 5))

两个输出选项

【问题讨论】:

  • 你建议如何在圆形图中绘制负值?
  • 负值(neg)被绘制为正值 |neg|但都靠近中心,例如红色的。还应显示文本,例如-3% 和上面例子的名字
  • 使用 mdata text() 我不知道如何添加将始终放置在每个区域的中心或顶部或底部的文本。

标签: r bar-chart stacked stacked-area-chart


【解决方案1】:

这应该可以帮助您完成大部分工作

library(ggplot2)
df<- data.frame(value=as.numeric(c(16, 2, 6, 10, -3)),
                cat=c("Numbers","Frosts","Earning","Doors","Shelfs"))

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) +
    geom_bar(stat="identity", colour="grey") +
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = 3) +
    scale_fill_manual(values=c("white", "red"))

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) +
    geom_bar(stat="identity", colour="grey") +
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = -1) +
    scale_fill_manual(values=c("white", "red")) +
    coord_polar()

您可能需要调整 vjust 值来更改标签的位置,或者为它们计算自定义 y 映射,但这是一个好的开始。

【讨论】:

  • 是否有能力以类似于barplot 的角度用灰线填充区域?使用 barplot(..., col=c(...), density=NUM, angle=c(....),....) 您可以设置不同阴影的颜色、密度和角度。
  • 不容易。此链接包含一些实现它的技巧,但看起来需要付出很多努力:stackoverflow.com/questions/2895319/…
  • 谢谢!似乎很难 :D 解决方法。也许我只会使用一些灰色。
【解决方案2】:

你可以试试这个:

library(ggplot2)
data<-data.frame(Name=c("Earning","Frosts","Doors","Shelfs","Numbers"),Val=c(1,2,6,10,16))

ggplot(data,aes(x=factor(1),y=Val,fill=Name))+
geom_bar(stat="identity",width=1)+coord_polar()

只需更改调色板并在任何你想要的地方添加文本(当然,如果在情节上太大,Val 列中的第一个值 - 它对应于你的负值)

【讨论】:

    【解决方案3】:

    右侧“相关”链接的topmost 应该为您提供构建堆叠条形图所需的大部分信息,但适合您的使用它会是这样的:

    # A vertical matrix containing the values
    md <- matrix(c(-3, 16, 2, 6, 10), ncol=1)
    d <- barplot(md, col=c(2, rep(0, 4))) 
    
    # Finding the vertical position for the labels
    ypos <- apply(md, 2, cumsum)
    ypos <- ypos - md/2
    ypos <- t(ypos)
    
    # I haven't checked if the values and names match
    text(d/3, ypos, adj=c(0, NA),
      paste(c("Earning","Numbers","Frosts","Doors","Shelfs"), md, sep=": "))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 2014-03-22
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多