目录

一 气球图和热图

1.气球图

 2.热图

二 南丁格尔玫瑰图 

三 金字塔图 

 四 饼图及其变种

1.饼图

2.扇形图

 3.环形图


一 气球图和热图

1.气球图

气球图是用气球大小表示数据的图形,它画出的是一个图形矩阵,其中每个单元格包含一个点(气球),其大小与相应数据的大小成比例

气球图可用于展示由两个类别变量生成的二维列联表,也可以用于展示具有行名和列名称的其他数据

绘图的数据形式是一个数据框或矩阵,数据框中包含至少三列,第1列对应第1个类别变量,第2列对应第2个类别变量,第3列是两个类别变量对应的频数或其他数值

   

满意度 不满意 满意 中立
 性别 网购次数                        
 男   1~2次              117   57  106
      3~5次              137   54  131
      6次以上            106   49   83
 女   1~2次              122  114  102
      3~5次              179  141  162
      6次以上            139  105   96
df<-as.data.frame(tab)                      # 将列联表转化成数据框
head(df)                                    # 查看前6行
性别 网购次数 满意度 Freq
 1   男    1~2次 不满意  117
 2   女    1~2次 不满意  122
 3   男    3~5次 不满意  137
 4   女    3~5次 不满意  179
 5   男  6次以上 不满意  106
 6   女  6次以上 不满意  139
#满意度、网购次数的气球图
my_cols<-c("#0D0887FF","#6A00A8FF","#B12A90FF","#E16462FF","#FCA636FF","#F0F921FF")
# 设置颜色向量
ggballoonplot(df,x="满意度",y="网购次数",   # 设置图形的x轴和y轴
              shape=21,                 # 设置气球形状,默认21,可选22,23,24,25
              size="Freq",fill="Freq",                 # 设置点的大小和填充颜色
              rotate.x.text=FALSE,                     # x轴文本标签不旋转
              ggtheme=scale_fill_gradientn(colors=my_cols))  # 设置渐变颜色

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_数据

#  按性别分面的满意度与网购次数的气球图

palette<-rev(brewer.pal(11,"RdYlGn"))           # 设置调色板
ggballoonplot(df,x="满意度",y="网购次数",
              size="Freq",fill="Freq",
              facet.by=c("性别"),                      # 按性别分面
              rotate.x.text=FALSE,                     # x轴文本标签不旋转
              ggtheme=scale_fill_gradientn(colors=palette))

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_文本标签_02

#  4个地区8项消费支出的气球图
library(ggpubr)
library(RColorBrewer)

data3_2<-read.csv("./mydata/chap03/data3_2.csv")
data3_2
支出项目    北京   天津    上海   重庆
 1       食品烟酒  7548.9 8647.0 10005.9 5943.5
 2           衣着  2238.3 1944.8  1733.4 1394.8
 3           居住 12295.0 5922.4 13708.7 3140.9
 4 生活用品及服务  2492.4 1655.5  1824.9 1245.5
 5       交通通信  5034.0 3744.5  4057.7 2310.3
 6   教育文化娱乐  3916.7 2691.5  4685.9 1993.0
 7       医疗保健  2899.7 2390.0  2602.1 1471.9
 8 其他用品及服务  1000.4  845.6  1173.3  398.1
mat<-as.matrix(data3_2[,2:5]);rownames(mat)=data3_2[,1]  
# 将data3_2转化成矩阵
mat
北京   天津    上海   重庆
 食品烟酒        7548.9 8647.0 10005.9 5943.5
 衣着            2238.3 1944.8  1733.4 1394.8
 居住           12295.0 5922.4 13708.7 3140.9
 生活用品及服务  2492.4 1655.5  1824.9 1245.5
 交通通信        5034.0 3744.5  4057.7 2310.3
 教育文化娱乐    3916.7 2691.5  4685.9 1993.0
 医疗保健        2899.7 2390.0  2602.1 1471.9
 其他用品及服务  1000.4  845.6  1173.3  398.1
palette<-rev(brewer.pal(11,"Spectral"))           # 设置调色板
ggballoonplot(mat,fill="value",
              rotate.x.text=FALSE)+                          # x轴文本标签不旋转
  scale_fill_gradientn(colors=palette)           # 使用梯度调色板

 

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_数据_03

 2.热图

热图是用颜色的饱和度(深浅)表示数值大小图形

可以绘制成矩形的形式,用每个矩形的颜色饱和度表示二维表中每个单元格对应的数值大小

也可以将矩形转换成极坐标,绘制出圆形的热图

#  性别、网购次数的热图
library(ggiraphExtra)
require(ggplot2)
library(gridExtra)
data3_1<-read.csv("./mydata/chap03/data3_1.csv")

# 绘制图形p1、p2
p1<-ggHeatmap(data3_1,aes(x=网购次数,y=性别),          # 绘制矩形热图
              addlabel=TRUE,                                      # 添加数值标签
              palette="Reds")+                                    # 使用红色调色板
  ggtitle("(a) 矩形热图")   

  
p2<-ggHeatmap(data3_1,aes(x=网购次数,y=性别),polar=TRUE,
              addlabel=TRUE,palette="Reds")+                       # 绘制极坐标热图
  ggtitle("(b) 极坐标热图")                                 # 添加标题     


grid.arrange(p1,p2,ncol=2)             # 按2列组合图形p1、p2

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_r语言_04

#  按性别分面的满意度和网购次数的矩形热图
ggiraphExtra::ggHeatmap(data3_1,aes(x=满意度,y=网购次数,facet=性别),
                        addlabel=TRUE,palette="Reds")

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_r语言_05

#  4个地区8项消费支出(元)的极坐标热图
library(ggiraphExtra)
require(ggplot2)
data3_2<-read.csv("./mydata/chap03/data3_2.csv")
data3_2
支出项目    北京   天津    上海   重庆
 1       食品烟酒  7548.9 8647.0 10005.9 5943.5
 2           衣着  2238.3 1944.8  1733.4 1394.8
 3           居住 12295.0 5922.4 13708.7 3140.9
 4 生活用品及服务  2492.4 1655.5  1824.9 1245.5
 5       交通通信  5034.0 3744.5  4057.7 2310.3
 6   教育文化娱乐  3916.7 2691.5  4685.9 1993.0
 7       医疗保健  2899.7 2390.0  2602.1 1471.9
 8 其他用品及服务  1000.4  845.6  1173.3  398.1
df<-reshape2::melt(data3_2,id.vars="支出项目",variable.name="地区",value.name="支出金额")                         # 融合数据
df
支出项目 地区 支出金额
 1        食品烟酒 北京   7548.9
 2            衣着 北京   2238.3
 3            居住 北京  12295.0
 4  生活用品及服务 北京   2492.4
 5        交通通信 北京   5034.0
 6    教育文化娱乐 北京   3916.7
 7        医疗保健 北京   2899.7
 8  其他用品及服务 北京   1000.4
 9        食品烟酒 天津   8647.0
 10           衣着 天津   1944.8
 11           居住 天津   5922.4
 12 生活用品及服务 天津   1655.5
 13       交通通信 天津   3744.5
 14   教育文化娱乐 天津   2691.5
 15       医疗保健 天津   2390.0
 16 其他用品及服务 天津    845.6
 17       食品烟酒 上海  10005.9
 18           衣着 上海   1733.4
 19           居住 上海  13708.7
 20 生活用品及服务 上海   1824.9
 21       交通通信 上海   4057.7
 22   教育文化娱乐 上海   4685.9
 23       医疗保健 上海   2602.1
 24 其他用品及服务 上海   1173.3
 25       食品烟酒 重庆   5943.5
 26           衣着 重庆   1394.8
 27           居住 重庆   3140.9
 28 生活用品及服务 重庆   1245.5
 29       交通通信 重庆   2310.3
 30   教育文化娱乐 重庆   1993.0
 31       医疗保健 重庆   1471.9
 32 其他用品及服务 重庆    398.1
ggHeatmap(df,aes(x=支出项目,y=地区,fill=支出金额),polar=TRUE,addlabel=TRUE,palette="Reds")

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_文本标签_06

ggHeatmap(df,aes(x=支出项目,y=地区,fill=支出金额),polar=FALSE,addlabel=TRUE,palette="Reds")

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_文本标签_07

二 南丁格尔玫瑰图 

南丁格尔玫瑰图(Nightingale rose diagram)是在极坐标下绘制的一种条形图,又称极区图(polar area diagram)

玫瑰图由英国护士和统计学家弗罗伦斯·南丁格尔(Florence Nightingale)所发明,她自己称这类图为鸡冠花(coxcomb),用于表达战地军医院季节性的死亡率

普通的条形图是在直角坐标下绘制的,玫瑰图则是在极坐标下绘制的,它使用弧形的半径长度表示数据的大小,每个类别的数据在极坐标中用一个扇形表示,扇形的大小与类别的频数成比例

#  2017年北京人均消费支出的玫瑰图

palette<-brewer.pal(8,"Set3")                     # 8种颜色的离散型调色板

ggplot(data3_2,aes(x=支出项目,y=北京,fill=factor(北京)))+           
  geom_bar(width=1,stat="identity",colour="black",fill=palette)+# 画出条形图
  geom_text(aes(y=北京,label=北京),color="grey30")+   # 添加y轴和数据标签
  coord_polar(theta="x",start=0)+                     # 转化成极坐标图
  theme(axis.title=element_text(size=8))+          # 设置坐标轴标签字体大小
  theme(axis.text.x=element_text(size=7,color="black"))#设置坐标轴刻度字体大小

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_饼图_08

# 图3-30 2017年北京、天津、上海、重庆人均消费支出的玫瑰图
library(ggiraphExtra)
library(ggplot2)

# 构建新的数据框,以使支出项目的排列顺序与原始数据框一致
data3_2<-read.csv("./mydata/chap03/data3_2.csv")
d.long<-reshape2::melt(data3_2,id.vars="支出项目",variable.name="地区",value.name="支出金额")   # 将数据转化成长格式
d.long
支出项目 地区 支出金额
 1        食品烟酒 北京   7548.9
 2            衣着 北京   2238.3
 3            居住 北京  12295.0
 4  生活用品及服务 北京   2492.4
 5        交通通信 北京   5034.0
 6    教育文化娱乐 北京   3916.7
 7        医疗保健 北京   2899.7
 8  其他用品及服务 北京   1000.4
 9        食品烟酒 天津   8647.0
 10           衣着 天津   1944.8
 11           居住 天津   5922.4
 12 生活用品及服务 天津   1655.5
 13       交通通信 天津   3744.5
 14   教育文化娱乐 天津   2691.5
 15       医疗保健 天津   2390.0
 16 其他用品及服务 天津    845.6
 17       食品烟酒 上海  10005.9
 18           衣着 上海   1733.4
 19           居住 上海  13708.7
 20 生活用品及服务 上海   1824.9
 21       交通通信 上海   4057.7
 22   教育文化娱乐 上海   4685.9
 23       医疗保健 上海   2602.1
 24 其他用品及服务 上海   1173.3
 25       食品烟酒 重庆   5943.5
 26           衣着 重庆   1394.8
 27           居住 重庆   3140.9
 28 生活用品及服务 重庆   1245.5
 29       交通通信 重庆   2310.3
 30   教育文化娱乐 重庆   1993.0
 31       医疗保健 重庆   1471.9
 32 其他用品及服务 重庆    398.1
a<-c("食品烟酒","衣着","居住","生活用品及服务","交通通信","教育文化娱乐","医疗保健","其他用品及服务")                        # 设置因子向量
f<-factor(a,ordered=TRUE,levels=a)             # 将支出项目变为有序因子
df.rose<-data.frame(支出项目=f,d.long[,2:3])   # 构建新的有序因子数据框
df.rose
支出项目 地区 支出金额
 1        食品烟酒 北京   7548.9
 2            衣着 北京   2238.3
 3            居住 北京  12295.0
 4  生活用品及服务 北京   2492.4
 5        交通通信 北京   5034.0
 6    教育文化娱乐 北京   3916.7
 7        医疗保健 北京   2899.7
 8  其他用品及服务 北京   1000.4
 9        食品烟酒 天津   8647.0
 10           衣着 天津   1944.8
 11           居住 天津   5922.4
 12 生活用品及服务 天津   1655.5
 13       交通通信 天津   3744.5
 14   教育文化娱乐 天津   2691.5
 15       医疗保健 天津   2390.0
 16 其他用品及服务 天津    845.6
 17       食品烟酒 上海  10005.9
 18           衣着 上海   1733.4
 19           居住 上海  13708.7
 20 生活用品及服务 上海   1824.9
 21       交通通信 上海   4057.7
 22   教育文化娱乐 上海   4685.9
 23       医疗保健 上海   2602.1
 24 其他用品及服务 上海   1173.3
 25       食品烟酒 重庆   5943.5
 26           衣着 重庆   1394.8
 27           居住 重庆   3140.9
 28 生活用品及服务 重庆   1245.5
 29       交通通信 重庆   2310.3
 30   教育文化娱乐 重庆   1993.0
 31       医疗保健 重庆   1471.9
 32 其他用品及服务 重庆    398.1
ggRose(df.rose,aes(x=地区,fill=支出项目,y=支出金额),stat="identity",reverse=TRUE)

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_饼图_09

#  以X轴为支出项目的玫瑰图
ggRose(df.rose,aes(x=支出项目,fill=地区,y=支出金额),
       stat="identity",reverse=TRUE)      # reverse=TRUE—颜色反转

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_r语言_10

三 金字塔图

金字塔图(pyramid chart)是一种特殊的塔状条形图,主要用于展示不同性别和不同年龄组的人口分布状况,因此也称为人口金字塔图( population pyramid chart)

绘制金字塔图时,通常将人口数或人口百分比作为X轴,将不同年龄组作为Y轴,不同年龄组内的人口数或百分比绘制成背靠背的条形图

金字塔图可用于展示不同年龄组中男性和女性人口的分布状况,也可以用于展示两个不同国家之间的人口年龄分布的差异,或展示不同时间点的人口年龄的分布

#  2010年(第6次人口普查)中国人口金字塔图
data3_3<-read.csv("./mydata/chap03/data3_3.csv")
data3_3
年龄组       男       女
 1          0岁  7461199  6325235
 2        1~4岁 33601367 28144809
 3        5~9岁 38464665 32416884
 4      10~14岁 40267277 34641185
 5      15~19岁 51904830 47984284
 6      20~24岁 64008573 63403945
 7      25~29岁 50837038 50176814
 8      30~34岁 49521822 47616381
 9      35~39岁 60391104 57634855
 10     40~44岁 63608678 61145286
 11     45~49岁 53776418 51818135
 12     50~54岁 40363234 38389937
 13     55~59岁 41082938 40229536
 14     60~64岁 29834426 28832856
 15     65~69岁 20748471 20364811
 16     70~74岁 16403453 16568944
 17     75~79岁 11278859 12573274
 18     80~84岁  5917502  7455696
 19     85~89岁  2199810  3432118
 20     90~94岁   530872  1047435
 21     95~99岁   117716   252263
 22 100岁及以上     8852    27082
library(DescTools)
par(mfrow=c(1,2),mai=c(0.8,0.7,0.2,0.2))

# 图(a)
PlotPyramid(lx=data3_3$男,rx=data3_3$女,   # 设置左侧条形和右侧条形  
            col=c("cornflowerblue","indianred"),     # 设置颜色向量
            lxlab="男",rxlab="女",                   # 设置左侧x轴和右侧x轴的标签
            ylab=data3_3[,1],ylab.x=0,               # 设置y轴标签和在x轴的位置
            cex.axis=0.7,cex.lab=1,cex.names=0.6,adj=0.5) # 设置坐标轴和标签的大小及位置

# 图(b)
PlotPyramid(lx=data3_3$男,rx=data3_3$女,
            col=c("cornflowerblue","indianred"),
            ylab=data3_3[,1],ylab.x=-80000000,
            lxlab="男",rxlab="女",
            gapwidth=0,space=0,                    # 设置左右条形间隔和上下条形间隔
            cex.axis=0.7,cex.lab=1,cex.names=0.6,adj=0.5)

 

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_r语言_11

四 饼图及其变种

1.饼图

饼图 ( pie chart)是用圆形及圆内扇形的角度来表示数值大小的图形,它主要用于表示一个样本(或总体)中各类别的频数占总频数的百分比

# 图3-33 不同满意度人数构成的饼图
data3_1<-read.csv("./mydata/chap03/data3_1.csv")
head(data3_1)

  性别 网购次数 满意度
1   女  6次以上   满意
2   男    3~5次 不满意
3   女    3~5次 不满意
4   男    3~5次   中立
5   女    1~2次   满意
6   男  6次以上 不满意

par(mfrow=c(1,2),mai=c(0.1,0.4,0.1,0.4),cex=0.7)
tab<-table(data3_1$满意度)                           # 生成频数表
tab

 不满意   满意   中立 
   800    520    680 

name<-names(tab)                                     # 设置名称向量
percent<-prop.table(tab)*100                         # 计算百分比
labs<-paste(name," ",percent,"%",sep="")             # 设置标签向量

#绘制普通饼图
pie(tab,labels=labs,init.angle=90,radius=1,col=c("red1","green1","turquoise1"))      

plotrix::pie3D(tab,labels=labs,explode=0.1,labelcex=0.7,col=c("lightgreen","pink","deepskyblue"))

 

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_文本标签_12

#  不同网购次数和不同满意度人数构成的饼图
library(ggiraphExtra)
require(ggplot2)
library(gridExtra)

p1<-ggPie(data=data3_1,aes(pies=网购次数))     # 使用原始数据框

# 生成带有交叉频数的数据框(根据原始数据绘图时不需要)
tab<-ftable(data3_1)          # 生成列联表(也可以使用table函数生成列联表)
tab
满意度 不满意 满意 中立
 性别 网购次数                        
 男   1~2次              117   57  106
      3~5次              137   54  131
      6次以上            106   49   83
 女   1~2次              122  114  102
      3~5次              179  141  162
      6次以上            139  105   96
df<-as.data.frame(tab)        # 将列联表转换成带有类别频数的数据框
p2<-ggPie(data=df,aes(pies=满意度,count=Freq)) # 使用带有交叉频数的数据框绘图
grid.arrange(p1,p2,ncol=2)                     # 按2列组合图形p1和p2

 

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_文本标签_13

2.扇形图

扇形图(fan chart)是饼图的一个变种,它是将频数构成中百分比最大的一个绘制成一个扇形区域,而其他各类百分比按大小使用不同的半径绘制出扇形,并叠加在这个最大的扇形上。

fan.plot(tab,labels=labs,
         max.span=0.9*pi,                           # 设置扇形图的最大跨度
         shrink=0.06,radius=1.2,                    # 设置扇形错开的距离和半径
         label.radius=1.4,ticks=200,               # 设置标签与扇形的距离
         col=c("deepskyblue","lightgreen","pink")) # 设置颜色向量

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_数据_14

 3.环形图

环形图( donut chart )是将饼图的中间挖掉后剩下的环形,也称为甜甜圈图

环形图可以看做是饼图的变种

#  网购次数和满意度的环形图

data3_1<-read.csv("./mydata/chap03/data3_1.csv")

p1<-ggDonut(data3_1,aes(donuts=网购次数))
p2<-ggDonut(data3_1,aes(donuts=满意度))
grid.arrange(p1,p2,ncol=2)                   # 按2列组合图形p1和p2

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_文本标签_15

#  网购次数与满意度、满意度与性别的饼环图

p1<-ggPieDonut(data=data3_1,aes(pies=网购次数,donuts=满意度))
# 网购次数饼图与满意度环形图的结合

p2<-ggPieDonut(data=data3_1,aes(pies=满意度,donuts=性别))
# 满意度饼图与性别环形图的结合
grid.arrange(p1,p2,ncol=2)               # 按2列组合图形p1和p2

R语言交互可视化分析房屋市场:ARIMA、VAR时间序列、XGBOOST、主成分分析、LASSO可 r语言数据可视化案例_数据_16