Excel/R(?)带子部分的饼图

Excel/R(?)带子部分的饼图

我在 Excel 电子表格中有两列长数据。一列是年龄值,另一列是代表个人喜爱颜色的数字(1-12)。例如

ID  AGE  FavCol
1   35     1
2   62     1
3   25     2
4   18     6
5   21     8
6   32     2
7   41     3
8   51     12

我想制作一个代表这两个变量的“爆炸式”饼图。我希望​​楔形由个人所处的年龄范围(18-24、25-34、35-49、50+)决定,并且我希望每个楔形分成 12 个部分,每个部分用不同的颜色表示颜色。我制作了一个不基于数据的图表,它反映了 3 个年龄段以及每个人最喜欢的颜色(绿色、蓝色、黄色): 例子

我该如何实现这一点?数据目前位于 Excel 电子表格和 R data.frame 中,因此使用任一程序都可以。我非常习惯使用 Illustrator 来展开和编辑颜色并在制作图表后添加标签。如果在这些程序中无法实现,那么在哪里可以实现?

答案1

随附的 R (RStudio) 示例代码展示了一些方法(参见内联注释)。您可以使用外部程序在制作图表后展开和编辑颜色并添加标签。或者使用 R 根据您的要求编辑代码。

请注意,有一个关于数据不同呈现方式的提议。

library(dplyr)
library(ggplot2)

# ----------------------------------------------------------
# populate data frame
# ----------------------------------------------------------
df <- data.frame(age = c(56,73,64,80,44,80,30,74,30,19,81,43,84,36,31,37,26,63,22,74,49,30,63,41,28),
                  favcol = c(3,8,7,2,4,8,11,4,5,4,8,8,6,5,7,11,4,6,8,3,1,2,3,5,2))

# When dealing with age data group the ages into age groups.
# Name your age groups e.g. ("18-24", "25-34", "35-49", "50+").
# -----------------------------------------------------------------------------
sGroup <- c("18-24", "25-34", "35-49", "50+")
sGroup

# Create a new column ageGroup and use the cut function to break age into groups 
# -----------------------------------------------------------------------------
df$ageClass <- cut(df$age, breaks = c(18,25,35,50, Inf), labels = sGroup, right = TRUE)

# sort by ageClass
# -----------------------------------------------------------------------------
df <- df[order(df$ageClass, df$favcol), ]
head(df)

# quickly count the unique values of one or more variables into a tibble
# optional: mutate prop
# -----------------------------------------------------------------------------
mydata <- df %>% count(ageClass, favcol) %>%
          mutate(prop = n/sum(n)*100)
mydata

# Basic piechart
ggplot(mydata, aes(x="", y=n, fill=ageClass)) +
  geom_bar(stat="identity", width=1, color="white") +
  coord_polar("y", start=0)

# Basic piechart
ggplot(mydata, aes(x="", y=n, fill=ageClass)) +
  geom_bar(stat="identity", width=1, color="white") +
  coord_polar("y", start=0) +
  
  theme_void() # remove background, grid, numeric labels

# -----------------------------------------------------------------------------
# Proposal for a different presentation of the data
# see also: https://cardiomoon.github.io/webr/reference/PieDonut.html
# -------------------------------------------------------
library(moonBook)
library(webr)

PieDonut(mydata,
         aes(pies= ageClass, donuts = favcol, count = n),
         explode=2,
         ratioByGroup=T,
         addDonutLabel = F,
         labelpositionThreshold = 0.4,
         donutLabelSize = 3,
         use.labels = F,
         title="Title",
         maxx = 1.5,
         r0=0,
         showPieName=FALSE)

结果(示例):

  1. 饼图示例。

在此处输入图片描述

  1. 饼状环状图示例。

在此处输入图片描述

答案2

我曾经用三个不同的饼图做过这个。我没有费心将它们分解,只是将一些数据以及图表背景透明化,然后将图表错开,这样剩余的可见部分看起来就像您的分解样本。

不确定这是否真的是显示数据的最佳方式,但现在考虑其他方法已经太晚了。

相关内容