【问题标题】:beautiful Pie Charts with R带有 R 的漂亮饼图
【发布时间】:2015-11-08 13:47:23
【问题描述】:

假设我有这个简单的数据:

 mydata <- data.frame(group=c("A", "B", "0", "AB"), FR=c(20, 32, 32, 16))

如果我想从这个数据框创建一个饼图,我可以这样做:

 with(mydata,pie(FR, labels=paste0(as.character(group), " ", FR, "%"), radius=1))

这很简单但可以接受。

我怎样才能得到与 ggplot2 或 lattice 类似的东西?

经过多次尝试和错误,我得到了

ggplot(mydata, aes(x = factor(1), y=FR,fill=factor(group)) ) + geom_bar(width = 1,stat="identity")+coord_polar(theta = "y") 

它更加复杂和丑陋。不是应该很容易吗? ggplot 书籍仅提供一些示例,不鼓励使用饼图。

格子更糟糕,你需要很多很多行才能让它吓到。

谁能帮我弄一个漂亮而简单的饼图,好吗? 例如...

没有20行代码就能轻松搞定的R包吗?

【问题讨论】:

  • rawrs 代码使用基础 R 生成了一个可爱的情节:stackoverflow.com/questions/26748069/… - 可能会给出一些提示(但很可能您需要 > 20 行)
  • ggplot 派怎么“丑”?如果您告诉我们缺少/需要更改的内容,我们会更容易为您提供帮助。
  • @skan,请查看大量免费信息,这些信息将帮助您了解为什么底部两个饼图您认为“漂亮”和(我猜)很好地沟通数据实际上是非常可怕的,并且在确保您想要的结果方面非常无效。我很欣赏 Steven 包含一个华夫饼图和一个干净执行的条形图,这对于您初始饼图中的数据也非常有用。
  • R 中的大多数可视化库没有对饼图的内置支持是有充分理由的。因为饼图可能是可视化分类数据(或与此相关的任何数据)的最糟糕的方式。一个简单的谷歌搜索应该会提出很多反对饼图的论据。
  • 有很多讨厌馅饼的人。即使他们是对的,您也没有问“为什么我不应该使用饼图?”! Lattice 没有饼图,大概是出于同样的原因,但它的作者 Deepayan Sarkar 包含了生成饼图的代码(在 his book 的最后三页上——这就是他认为该主题的重要性)。 Sarkar 已经慷慨地将书中的代码放到网上,饼​​图代码是here。现在你可以制作漂亮的格子饼图了——不管是不是邪恶的。

标签: r ggplot2 pie-chart lattice


【解决方案1】:

为什么不是方形饼图?

devtools::install_github("hrbrmstr/waffle")
library(waffle)

mydata <- c(`A`=20, `B`=32, `0`=32, `AB`=16)
waffle(mydata, title = "Yummy waffle pie!")


如果您有多个维度的信息,另一个选项可能是sunburstR。使用来自@rawr postbrowsers 数据,您可以这样做:

library(sunburstR)
library(dplyr)
library(tidyr)
browsers %>%
  unite(bv, browser, version, sep = "-") %>%
  select(bv, share) %>%
  sunburst(., count = TRUE)

您可以使用treemap(对于交互式版本,请尝试@timelyportfolio 的d3treeRpackage

library(treemap)
tm <- treemap(
  browsers,
  index=c("browser", "version"),
  vSize="share",
  vColor="share",
  type="value"
)

您也可以使用桑基图(来自networkD3package

library(networkD3)
df <- browsers %>%
  mutate_each(funs(as.character), browser, version) %>%
  mutate(bn = group_indices_(., .dots = "browser"), 
         cn = max(bn) + row_number()) 

links <- select(df, bn, cn, share)
nodes <- data.frame(name = c("", sort(unique(df$browser)), df$version))

sankeyNetwork(Links = links, Nodes = nodes, Source = "bn",
              Target = "cn", Value = "share", NodeID = "name",
              fontSize = 12, nodeWidth = 30)

【讨论】:

  • 两个情节都很棒@Steven Beaupre
【解决方案2】:

这里有一些方便的提示:

来源:Dark Horse Analytics: Salvaging the Pie

(srsly tho,条形图有什么问题?)

注意:我不知道 Dark Horse Analytics 是做什么的。这只是我的首选反派演示图像。

【讨论】:

    【解决方案3】:

    您可以尝试使用 plotrix 包中的 pie3D() 函数:

    library(plotrix)
    pie3D(mydata$FR, labels = mydata$group, main = "An exploded 3D pie chart", explode=0.1, radius=.9, labelcex = 1.2,  start=0.7)
    

    【讨论】:

    • 如果有一些 C4 可用于实际分解饼图 :-)
    • 你能解释一下什么是 C4 吗?
    • 好的,我以为你在说一些包或方法
    【解决方案4】:

    经过大量试验和错误,我认为情节设计效果最好:

    library(plotly)
    mydata <- data.frame(group=c("A", "B", "0", "AB"), FR=c(20, 32, 32, 16))
    
    q <- plot_ly(mydata, labels = ~group, values = ~FR, type = 'pie') %>%
      layout(title = "Title",          
             xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
             yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
    q
    
    

    这是一个 png,当你将鼠标悬停在它上面时,Rstudio 中的原始图片是交互式的。

    【讨论】:

    • 我也同意情节更直接
    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 2014-09-24
    • 2013-07-09
    • 1970-01-01
    • 2017-02-26
    • 2020-08-13
    • 2018-04-06
    • 2012-10-18
    相关资源
    最近更新 更多