详情参考《R语言数据可视化之美》p96,p222
效果图:
tu1.png数据:
表1处理前.png数据预处理:
发现数据横轴为元素,纵轴为浓度,MR和TEMP为两个分组,所以要处理为这样:
表1处理后.png
以元素为主,给每个元素标好对应的分类便于后续处理
处理数据:
#加载包
> library(ggplot2)
> library(openxlsx)
> library(reshape2)
#读取数据
> read.xlsx("c:/Users/RNG/Desktop/2.xlsx")
> df <- read.xlsx("c:/Users/RNG/Desktop/2.xlsx")
Element concentration(mg/L) TEMP(℃) MR
1 Cr 0.14000 850 0.06250000
2 Cr 0.14000 1050 0.07638889
3 Cr 0.20000 850 0.07638889
4 Cr 0.21000 950 0.07638889
5 Cr 0.24000 1050 0.06250000
6 Cr 0.32000 950 0.06250000
7 Cd 0.00041 850 0.06250000
8 Cd 0.00060 850 0.07638889
9 Cd 0.00060 950 0.07638889
10 Cd 0.00064 950 0.06250000
11 Cd 0.05100 1050 0.07638889
12 Cd 0.06800 1050 0.06250000
13 Pb 0.00010 850 0.07638889
14 Pb 0.00010 950 0.07638889
15 Pb 0.00070 950 0.06250000
16 Pb 0.00600 1050 0.06250000
17 Pb 0.01600 850 0.06250000
18 Pb 0.00070 950 0.07638889
19 Zn 0.00180 850 0.07638889
20 Zn 0.00440 950 0.06250000
21 Zn 0.00690 1050 0.07638889
22 Zn 0.00850 850 0.06250000
23 Zn 0.27000 1050 0.07638889
24 Zn 0.38000 1050 0.06250000
25 Cu 0.00010 950 0.07638889
26 Cu 0.00100 950 0.06250000
27 Cu 0.00110 850 0.07638889
28 Cu 0.00170 850 0.06250000
29 Cu 0.04000 1050 0.06250000
30 Cu 0.04600 1050 0.07638889
#发现原本表中的1:30和1:50变成了数字,所以第一步需要把MR列复原:
> df$MR[which(df$MR == 0.0625)] <- "1:30"#使用该函数将MR列中所有的相同项0.0625替换为1:30
> df$MR[which(df$MR == 0.0763888888888889)] <- "1:50"
#将分组列变为因子
> df$Element <- as.factor(df$Element)
> df$`TEMP(℃)` <- as.factor(df$`TEMP(℃)`)
> df$MR <- as.factor(df$MR)
画图
> ggplot(df,aes(x=Element,y=`concentration(mg/L)`,fill=`TEMP(℃)`))#ggplot函数,fill=填充颜色,选择为分组
+geom_bar(stat = "identity",position = position_dodge())#使用geom—bar函数绘制簇状图stat参数为"identity",position = position_dodge()用来调节每个单元的柱子之间的间隔,不加参数为无间隔
+facet_grid(cols = vars(df$MR))#该函数绘制分面图,cols表示按横着分,vars(MR)表示按MR的分组分
+theme(panel.background = element_rect(fill='white',colour = 'black'),axis.title.x=element_text(colour = 'black',size=20),axis.title.y = element_text(colour = 'black',size=20),legend.text = element_text(size = 15))#设置主题,具体参考POca绘制
网友评论