别再只画柱状图了!四种方法教你画克里夫兰点状图!附代码,快收藏~

学术   2024-06-21 16:39   浙江  
克利夫兰点状图(Cleveland dot plot)与柱状图 (Bar Chart)类似,区别是通过点而不是条带来展示数值。比较多组间的数值差异时,是很不错的选择。

今天小编将介绍四种不同方法画克利夫兰点状图,赶快试试!

先安装和载入需要的R包:

# 需要提前安装好:install.packages("lattice")
library(lattice)

# 需要提前安装好:install.packages("ggplot2")
library(ggplot2)

# 需要提前安装好:install.packages("ggiraphExtra")
library(ggiraphExtra)
准备作图需要的数据。

提取数据集mtcars中的两个变量和行名称,并进行一些数据转换处理:

mydata <- mtcars[, c(1, 9)]
mydata$names <- row.names(mydata)
mydata$am <- factor(mydata$am, labels = c("automatic", "manual"))

str(mydata); head(mydata, 10)

这次的作图数据中共有32行和3列(变量),mpg为数值变量,am和names为分类变量。其中变量names为行的名称,也就是32种汽车的类型。

开始作图!

第一种方法,我们会使用基础R中的作图函数dotchart()来完成作图。

最基础的点图:

dotchart(mydata$mpg, main = "Motor Trend Car Road Tests")

上图中,x轴上为mpg;水平线上一共32个点,点的位置对应该类型的mpg数值大小

进一步修饰点状图:

dotchart(mydata$mpg,
         pch = 19, # 形状
         col = hcl.colors(32, palette = "Set2"), # 颜色
         pt.cex = 1.5, # 大小
         labels = mydata$names, # y轴上,组别标签
         frame.plot =
TRUE, # 图片周围方框
         main = "Motor Trend Car Road Tests",
         xlab = "Miles/(US) gallon",
         ylab = "Names of automobiles")

上面代码中,修饰了图片上点的颜色、大小、标题等等。其中,labels = mydata$names 还在y轴上添加32个点对应的标签。

多增加一个分类变量am,将32个汽车再分组:

dotchart(mydata$mpg,
         xlim = c(10,40), # x轴范围
         bg = "skyblue", # 底色
         pch = 22
         pt.cex = 1.2,
         labels = mydata$names, # y轴上亚组名
         groups = mydata$am, # 分组
         gcolor = c("steelblue", "tomato"),
         main = "Motor Trend Car Road Tests", # 标题名
         xlab = "Miles/(US) gallon", # x轴标题
         ylab = "Names of automobiles") # y轴标题

第二种方法,用到{lattice}中的dotplot()函数:

dotplot(names ~ mpg|am, data = mydata, groups = am,
        auto.key = list(space = "right", points = TRUE, lines =
FALSE), # 修改legend
        main = "Motor Trend Car Road Tests",
        xlab = "Miles/(US) gallon",
        ylab = "Names of automobiles")

非常简单,点状图就画好了!

第三种方法,用到大家非常熟悉的R包{ggplot2}来画,并且修饰图片:

ggplot(mydata, aes(x = names, y = mpg, colour = am)) +
  geom_point(size = 3) + # 设置点的大小
  scale_colour_manual(values = c("steelblue", "tomato")) +
  coord_flip() + # 翻转图片
  theme_bw() + # 设置主题风格
  theme(panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_line(linetype = 2)) + # 修饰grids
  labs(title = "Motor Trend Car Road Tests",
       x = "Names of automobiles",
       y = "Miles/(US) gallon",
       colour = "Transmission")

上述代码中,x为names,y为mpg,颜色变量为am。使用coordinate_flip()函数翻转了x与y,实现上图的效果。

第四种方法,使用R包{ggiraphExtra}中函数完成画图:

ggCLE(data = mydata, aes(x = mpg, y = names, colour = names)) +
  labs(title = "Motor Trend Car Road Tests",
       x = "Miles/(US) gallon")


增加一个分类变量am:


ggCLE(data = mydata, aes(x = mpg, y = names, colour = am, facet = am)) +
  scale_colour_manual(values = c("#009E73", "#D55E00")) +
  labs(title = "Motor Trend Car Road Tests",
       y = "Names of automobiles",
       x = "Miles/(US) gallon")


四种方法做克利夫兰点状图都给到大家啦~

更多实用作图分享都可以在我们公众号的往期消息中找到哦

好啦,今天的内容就到这里。如果有帮助,记得分享给需要的人


公众号的线上课程
1. 《R语言和统计新手课程》
2. 《回归:从入门到进阶》
3. 《线性混合模型和纵向数据分析》
【通过公众号菜单栏--线上课程】

统计咨询
《服务介绍和经典合作案例》

公众号核心成员的成果发表
《SCI医学1区影响因子9分论文》

公众号核心成员担任SCI杂志Associate Editor!
《JAD杂志Associate editor》
《Frontiers in Neuroscience, Frontiers in Neurology and Frontiers in Psychiatry杂志的神经退行性病变板块》

加入我们
成为我们的课程推广大使,赢取高额回报!
【通过公众号菜单栏--联系我们--招推广员】

▌本文由R语言和统计首发
▌课程相关咨询可添加R师妹微信: kefu_rstats
▌编辑:June
▌邮箱:contact@rstats.cn
▌网站:www.rstats.cn
我们致力于让R语言和统计变得简单!




R语言和统计
我们定期更新与R有关的内容,比如R编程基础,作图,实用R包的解读,统计学基础知识,前沿的统计方法,机器学习等等。
 最新文章