前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Data to Viz:饼图的问题

Data to Viz:饼图的问题

作者头像
小汪Waud
发布2023-11-27 18:41:13
2210
发布2023-11-27 18:41:13
举报
文章被收录于专栏:小汪Waud

本期内容为 THE ISSUE WITH PIE CHART 饼图的问题[2]

1Bad by definition 坏的定义

饼图是一个分为多个扇区的圆,每个扇区代表整体的一部分。它通常用于显示百分比,其中扇区之和等于 100%。

代码语言:javascript
复制
# Libraries
library(tidyverse)
library(hrbrthemes)
library(viridis)
library(patchwork)

# create 3 data frame:
data1 <- data.frame( name=letters[1:5], value=c(17,18,20,22,24) )
data2 <- data.frame( name=letters[1:5], value=c(20,18,21,20,20) )
data3 <- data.frame( name=letters[1:5], value=c(24,23,21,19,18) )

# Plot
plot_pie <- function(data, vec){

ggplot(data, aes(x="name", y=value, fill=name)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y", start=0, direction = -1) +
  scale_fill_viridis(discrete = TRUE,  direction=-1) + 
  geom_text(aes(y = vec, label = rev(name), size=4, color=c( "white", rep("black", 4)))) +
  scale_color_manual(values=c("black", "white")) +
  theme_ipsum() +
  theme(
    legend.position="none",
    plot.title = element_text(size=14),
    panel.grid = element_blank(),
    axis.text = element_blank(),
    legend.margin=unit(0, "null")
  ) +
  xlab("") +
  ylab("")
  
}

plot_pie(data1, c(10,35,55,75,93))

问题是有的情况下的饼图的阅读体验非常糟糕。如上图,在相邻部分中,尝试找出最大的一组,并尝试按值对它们进行排序。您可能会很难做到这一点,这就是必须避免使用饼图的原因。

如果您仍然不相信,让我们尝试比较下列几个饼图。再次尝试了解这 3 个图形中哪一组的值最高。另外,尝试弄清楚各组之间数值的变化是什么。

代码语言:javascript
复制
a <- plot_pie(data1, c(10,35,55,75,93))
b <- plot_pie(data2, c(10,35,53,75,93))
c <- plot_pie(data3, c(10,29,50,75,93))
a + b + c

现在,让我们使用条形图来表示完全相同的数据:

代码语言:javascript
复制
# A function to make barplots
plot_bar <- function(data){
  ggplot(data, aes(x=name, y=value, fill=name)) +
    geom_bar( stat = "identity") +
    scale_fill_viridis(discrete = TRUE, direction=-1) + 
    scale_color_manual(values=c("black", "white")) +
    theme_ipsum() +
    theme(
      legend.position="none",
      plot.title = element_text(size=14),
      panel.grid = element_blank(),
    ) +
    ylim(0,25) +
    xlab("") +
    ylab("")
}

# Make 3 barplots
a <- plot_bar(data1)
b <- plot_bar(data2)
c <- plot_bar(data3)

# Put them together with patchwork
a + b + c

正如您在此条形图上所看到的,三个饼图之间存在很大差异,并且具有隐藏变化模式,您在讲述故事时绝对不想错过。

2And often made even worse 而且常常变得更糟

即使饼图从定义上来说很糟糕,但通过添加其他不好的功能仍然有可能使它们变得更糟:

  • 3d
  • 图例放在一边
  • 总和≠100%
  • 过多的内容
  • 爆炸饼图(exploded pie charts)

exploded pie charts

3Alternatives 备选方案

条形图是饼图的最佳替代品。如果你有很多值要显示,你也可以考虑棒棒糖图(lollipop plot),我认为它更优雅一些。以下是基于世界上几个国家销售的武器数量的示例:

如果您的目标是描述整体的组成部分,另一种可能性是创建树形图。

4Going further 更进一步

  • 谁出售更多武器[3]:请参阅这个故事,它提供了饼图的几种替代方案。
  • R[4]Python[5] 中绘制饼图。

私货时间:我认为,如果你还没有明确自己的目的(你到底想要表达给读者什么内容)时,就不要选择饼图。

下图是我汇报时制作的饼图,目的是体现从种植面积的角度体现玉米研究的重要性,提供给大家参考。


关于 DATA TO VIZ

From Data to Viz 系列根据输入数据格式对图表类型进行分类。它以决策树的形式出现,结果是选择一组可能合适的可视化来表示数据集。

该项目建立在两个基本理念之上。首先,大多数数据分析可以概括为大约二十种不同的数据集格式。其次,数据和上下文共同决定合适的图表。

因此,我们建议的方法包括识别并尝试所有可行的图表类型,以找出最适合您的数据和想法的方法。

一旦确定了这组图形,data to viz 就会指导您做出最佳决策。它还提供了要避免的常见注意事项列表,并始终提供 R 编程语言中的可重现代码片段。

Dataviz 是一个充满无限可能性的世界,该项目并不声称详尽无遗。但是,它应该为您提供一个良好的起点。

从数据到可视化目前处于测试版本,强烈鼓励任何反馈。您可以在Github[6]上提出问题,在 Twitter 上留言,或者通过 yan.holtz.data@gmail.com 向作者发送电子邮件。

参考资料

[1]

DATA TO VIZ: https://www.data-to-viz.com/caveat/pie.html

[2]

THE ISSUE WITH PIE CHART 饼图的问题: https://www.data-to-viz.com/caveat/pie.html

[3]

谁出售更多武器: https://www.data-to-viz.com/story/OneNumOneCat.html

[4]

在 R 中绘制饼图: https://r-graph-gallery.com/pie-plot

[5]

在 Python 中绘制饼图: https://python-graph-gallery.com/pie-plot/

[6]

data_to_viz Github: https://github.com/holtzy/data_to_viz

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小汪Waud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1Bad by definition 坏的定义
  • 2And often made even worse 而且常常变得更糟
  • 3Alternatives 备选方案
  • 4Going further 更进一步
    • 关于 DATA TO VIZ
      • 参考资料
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档