绘图技巧 | 不同样式华夫饼图(Waffle charts)绘制技巧

2022-05-24 15:53:41 浏览数 (3)

今天这篇推文,小编为大家介绍华夫饼图(Waffle charts) 的绘制方法,这次主要介绍使用R-waffle包进行绘制。主要内容如下:

  • R-waffle包简介
  • R-waffle包样例介绍

R-waffle包简介

使用R绘制华夫饼图最简单的方法是使用waffle包进行绘制(当然,你也可以使用ggplot2的geom_tile()和geom_point()函数绘制)。这里主要介绍waffle包waffle()、geom_pictogram()、geom_waffle()和scale_label_pictogram() 绘图函数,详细如下:

  • waffle():绘制方形华夫饼图
  • geom_waffle():绘制方形华夫饼图图层(用法和ggplot2相似)
  • geom_pictogram():绘制类似图形文字的集合图层。
  • scale_label_pictogram():与geom_pictogram()一起使用,使用Font Awesome字体映射标签。

接下来,通过各种例子介绍上述介绍的绘图函数。

R-waffle包样例介绍

1. waffle():

基本例子:

代码语言:javascript复制
library(tidyverse)
library(ggtext)
library(hrbrthemes)
library(wesanderson)
library(LaCroixColoR)
library(RColorBrewer)
library(waffle)

parts <- data.frame(
  names = LETTERS[1:4],
  vals = c(80, 30, 20, 10)
)
waffle_plot <- waffle(parts,rows = 8) 
  theme_ipsum(base_family = "Roboto Condensed",grid = "")  
  labs(
  title = "Example of <span style='color:#D20F26'>waffle::waffle() function</span>",
  subtitle = "processed charts with <span style='color:#1A73E8'>waffle()</span>",
  caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>")  
  theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                                      size = 20, margin = margin(t = 1, b = 12)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
        plot.caption = element_markdown(face = 'bold',size = 12),
        axis.text.x = element_blank(),
        axis.text.y = element_blank())

Example01 of waffle()

当然你还可以通过设置use_glyph参数,使用fontawesome 图标进行绘制,如下:

代码语言:javascript复制
waffle(parts,rows = 8,
                      colors = c("#9DC8C8", "#58C9B9", "#519D9E","#D1B6E1"),
                      use_glyph = "file-medical",
                      size=5,legend_pos = "bottom") 
····

Example02 of waffle()

2.geom_waffle():

代码语言:javascript复制
df <- data.frame(
  parts = factor(rep(month.abb[1:3], 3), levels=month.abb[1:3]),
  vals = c(10, 20, 30, 6, 14, 40, 30, 20, 10)
)
df_count <- df %>% count(parts, wt = vals)
plot01 <- ggplot(data = df_count,aes(fill = parts, values = n))  
  geom_waffle(n_rows = 20, size = .5, colour = "black", flip = TRUE)  
  #ggsci::scale_fill_lancet(labels = c("Fruit", "Sammich", "Pizza")) 
  scale_fill_manual(values = lacroix_palette(type = "paired"),
                    labels = c("Fruit", "Sammich", "Pizza"))  
  guides(fill=guide_legend(nrow=1,byrow=TRUE,reverse = TRUE,title=NULL)) 
  labs(
    title = "Example of <span style='color:#D20F26'>waffle::geom_waffle function</span>",
    subtitle = "processed charts with <span style='color:#1A73E8'>geom_waffle()</span>",
    caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>")  
  theme_ipsum(base_family = "Roboto Condensed",grid="")  
  theme_enhance_waffle() 
  theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                                  size = 20, margin = margin(t = 1, b = 12)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
        plot.caption = element_markdown(face = 'bold',size = 12),
        legend.position = 'bottom',)

Example01 of geom_waffle

「Waffle Bar Charts」

代码语言:javascript复制
test02 <-  storms %>% filter(year >= 2010) %>% count(year, status)
ggplot(test02, aes(fill = status, values = n))  
  geom_waffle(color = "white", size = .25, n_rows = 10, flip = TRUE)  
  facet_wrap(~year, nrow = 1, strip.position = "bottom")  
  scale_x_discrete()   
  scale_y_continuous(labels = function(x) x * 10,expand = c(0,0))  
  scale_fill_manual(values = lacroix_palette(type = "paired"),
                    name=NULL)  
  coord_equal()  
  labs(
    title = "Example of <span style='color:#D20F26'>waffle::geom_pictogram function</span>",
    subtitle = "processed charts with <span style='color:#1A73E8'>geom_pictogram()</span>",
    caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>",
    x = "Year",
    y = "Count")  
  theme_minimal(base_family = "Roboto Condensed")  
  theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                                  size = 20, margin = margin(t = 1, b = 12)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
        plot.caption = element_markdown(face = 'bold',size = 12),
        legend.position = 'bottom',
        panel.grid = element_blank(),
       axis.ticks.y = element_line())  
  guides(fill = guide_legend(reverse = TRUE))

Example of geom_waffle()

通过此例子,你就可以通过使用不同图方形个数表示不同类别的个数,当然,你也可以使用不同样式图标进行表示。

3. geom_pictogram()和scale_label_pictogram()

我们还还可以通过geom_pictogram()scale_label_pictogram()绘图函数使用fontawesome字体图标进行绘制,例子如下(样例中使用的字体获取方式见文末):

代码语言:javascript复制
#导入字体:比较重要的一步
library(showtext)
font_add(family = "FontAwesome5Free-Solid", regular = "E:\Download Fonts\fa-solid-900.ttf")
font_add(family = "FontAwesome5Free-Regular", regular = "E:\Download Fonts\fa-regular-400.ttf")
font_add(family = "FontAwesome5Brands-Regular", regular = "E:\Download Fonts\fa-brands-400.ttf")
font_add(family = "Roboto Condensed",regular = "E:\Download Fonts\RobotoCondensed-Regular.ttf")

plot02 <- ggplot(data = df_count)  
  geom_pictogram(aes(label = parts, values = n,colour = parts),n_rows = 10,
                 flip = TRUE, make_proportional = TRUE)  
  scale_colour_manual(values = lacroix_palette(type = "paired"),
                      labels = c("Fruit", "Sammich", "Pizza"))  
  scale_label_pictogram(
    values = c("apple-alt", "bread-slice", "pizza-slice"),
    labels = c("Fruit", "Sammich", "Pizza")
  )  
  guides(fill=guide_legend(nrow=1,byrow=TRUE,reverse = TRUE,title=NULL)) 
  labs(
    title = "Example of <span style='color:#D20F26'>waffle::geom_pictogram()  function</span>",
    subtitle = "processed charts with <span style='color:#1A73E8'>geom_pictogram()</span>",
    caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>")  
  theme_ipsum(grid="")  
  theme_enhance_waffle() 
  theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",face = 'bold',
                                      size = 20, margin = margin(t = 1, b = 12)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
        plot.caption = element_markdown(face = 'bold',size = 12),
        legend.position = 'bottom',)

Example Of geom_pictogram

综上,R-waffle包绘制华夫饼图(Waffle charts) 的主要绘制方法都已介绍完,当然还有许多优秀的函数没介绍到,感兴趣的小伙伴可自行搜索哈~~

总结

本期,小编介绍了使用R-waffle包绘制华夫饼图(Waffle charts),当然,小编更喜欢R-waffle包可使用Font Awesome字体作为labels的这一功能,同时,小伙伴们也注意下字体的引用哈

0 人点赞