R-ggplot2 基础图表绘制-散点图

2021-02-22 15:29:52 浏览数 (2)

本期开始陆续推出基础图表的绘制推文教程,也算是自己的一个基础知识积累和巩固,希望和大家一同学习进步。这期的推文是关于散点图的绘制,主要知识点如下:

  • R-ggplot2 散点图绘制
  • ggplot2 散点图美化

(毕竟好看的图表设计会使人眼前一亮,当然也会增加自己的学习兴趣)

R-ggplot2 散点图绘制

数据预览

ggplot2 对于绘制目前所见的图表都是有对应的绘图函数可以绘制,后面我们陆续介绍。这次使用的函数为geom_point(),而所使用的数据集为可用于替代iris数据且用于数据探索和可视化展示的全新数据集,数据预览如下:

数据可视化

我们直接使用geom_point()方法进行绘制,添加必要的修饰,代码如下:

代码语言:javascript复制
scatter_pir <- ggplot(data = penguins_df,aes(x = bill_length_mm, y = bill_depth_mm))  
  geom_point(aes(fill = species,size=body_mass_g),shape = 21,alpha=.8,
             color = "transparent") 
  #在外面家里白色圆框
  geom_point(aes(size = body_mass_g), 
             shape = 21,
             color = "white",
             fill = "transparent",
  )  
  labs(x = "Bill length (mm)",
       y = "Bill depth (mm)",
       title = "Base Charts Exercise 01: Point Charts",
       subtitle = "original scatter charts",
       caption = "Visualization by DataCharm")

scatter_pir

可视化结果如下:

可以看出,默认的ggplot2 绘图主题(配色、排版等)都是差强人意,接下来我们借用第三方包hrbrthemes以及对 theme() 定制化设置,使其颜值升级。

ggplot2 散点图美化

hrbrthemes 主题美化包

hrbrthemes 包作为一个优秀的ggplot2第三方包,其强大的绘图主题设置(字体、背景、网格等绘图属性)功能可以帮你节省宝贵的时间,让你专注于数据本身。这里建议大家在熟悉ggplot2绘图原理之后,可以考虑使用该包作为自己的绘图主题,当然,在面对不同的绘图需求时,自己也可以进行主题的定制操作。更多关于该包的介绍,可以去官网查看-hrbrthemes官网。

散点图美化操作

我们接着上面的绘图进行美化,修改ggplot2 默认的绘图风格,具体代码如下:

代码语言:javascript复制
color <- c("#FF8C00", "#A034F0", "#159090")

scatter_pro <- ggplot(data = penguins_df,aes(x = bill_length_mm, y = bill_depth_mm))  
  geom_point(aes(fill = species,size=body_mass_g),shape = 21,alpha=.8,
             color = "transparent") 
  #在外面家里白色圆框
  geom_point(aes(size = body_mass_g), 
             shape = 21,
             color = "white",
             fill = "transparent",
  )  
  scale_fill_manual(values = color,name = "") 
  scale_size(
    name = "",
    breaks = 3:6 * 1000,
    labels = c("3 kg", "4 kg", "5 kg", "6 kg")
  )  
  #对图例进行设置
  guides(size=guide_legend(label.position = "bottom",
                          override.aes = list(color=color[2],stroke=.9,fill=NA)),
         fill = guide_legend(label.position = "bottom",
                             override.aes = list(size=5))) 
  labs(x = "Bill length (mm)",
       y = "Bill depth (mm)",
       title = "Base Charts in R Exercise 01: <span style='color:#D20F26'>Point Charts</span>",
       subtitle = "processed scatter charts",
       caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") 
  theme_ipsum(base_family = "Arial_Narrow")  
  theme(
        plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                             size = 22, 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 = c(.1, .1), 
        #legend.position = "bottom",
        legend.direction = "horizontal", 
        #legend.justification = "right",
        legend.key.width = unit(.01, "lines"), 
        legend.text = element_text(size = 8, color = "grey50")) 
scatter_pro

这里注意下以下代码:

代码语言:javascript复制
 scale_size(
    name = "",
    breaks = 3:6 * 1000,
    labels = c("3 kg", "4 kg", "5 kg", "6 kg")
  ) 

实现对size映射的定制化设置,包括刻度(breaks)、刻度标签(labels)。

代码语言:javascript复制
#对图例进行设置
  guides(size=guide_legend(label.position = "bottom",
                          override.aes = list(color=color[2],stroke=.9,fill=NA)),
         fill = guide_legend(label.position = "bottom",
                             override.aes = list(size=5)))

则实现了对图例(legend) 的定制化设置了,这部分掌握了,网上的那种优秀且常见的图例就可以绘制出来了。

代码语言:javascript复制
theme(
        plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                             size = 22, 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 = c(.1, .1), 
        #legend.position = "bottom",
        legend.direction = "horizontal", 
        #legend.justification = "right",
        legend.key.width = unit(.01, "lines"), 
        legend.text = element_text(size = 8, color = "grey50")) 

主题设置里,则结合ggtext包的文本定制化设置(element_markdown()),实现对文本个性化(如一行文本不同颜色、不同粗细以及刻度标签不同颜色等)设置。

最终的可视化效果如下:

总结

本期算是第一篇关于基础图表的绘制,各个细节部分我也进行了单独的代码解释,本来计划再搞些基础的,但那个效果实在是不能看,再说了,基础的教程网上的资源也很多。今后基础图表的绘制也都会按照这个样式(基础图表 美化),希望大家能够喜欢,并且有所获得。

0 人点赞