R ggplot2条形图

常见问题
1、数据的分组
可以用 堆叠式 或 分离式 实现
堆叠式:position=”stack” 或 position=position_stack()
分离式:position=”dodge” 或 position=position_dodge()
2、条形的宽度,分组之间的举例

举例一:(简单的数据分组应用)

 dat1 <- data.frame(
     sex = factor(c("Female","Female","Male","Male")),
    time = factor(c("Lunch","Dinner","Lunch","Dinner"), levels=c("Lunch","Dinner")),
    total_bill = c(13.53, 16.81, 16.24, 17.42)
 )

#分离式
p <- ggplot(data=dat1, aes(x=time, y=total_bill, fill=sex)) + geom_bar(stat="identity", position=position_dodge())


p

这里写图片描述

#如果改成堆叠式
p <- ggplot(data=dat1, aes(x=time, y=total_bill, fill=sex)) +
     geom_bar(stat="identity", position=position_stack())
p

这里写图片描述

举例二:(稍复杂的分组)

a<-data.frame(x=c("total","a","male","female","b","low education",
                  "mid education","high education","c","working","not working"),
              y=c(80,0,30,50,0,20,40,20,0,65,35))

#现在的需求是
#group1:male+female  group2:low education+mid education+ high education 
#group3:working+not working   group4:total

a$rel = c("a", "a", "a", "b", "b", "b", "c", "c") # 处理,即设置分组

#涉及的参数后面会提到
ggplot(a, aes(rel, y, fill = factor(x))) + 
  geom_bar(stat = "identity", width = 0.5, position = position_dodge(0.7))

这里写图片描述

举例三:(间隔、宽度设置)

width即为单个条形的宽度,默认为1, dodge控制他们之间的间隔

此图:width=0.5 position_dodge(0.5)
这里写图片描述

此图:width=0.5 position_dodge(0.7)
这里写图片描述

此图:width=0.5 position_dodge(1)
这里写图片描述

完整举例:

#下载readxl包:此包作用:能从excel中读取数据
install.packages(“readxl”)

#使用这个包
library(readxl)

#从excel中读取数据
dataset<-read_excel(path=”文件路径/文件名”,range=”选取数据的矩形区域”)
#解析
#在读取excel原数据之前,对原数据做了点修改,将第一列命名为了Type
#path参数表示文件的相对或绝对路径
#相对路径可通过调用getwd()看到当前的工作目录
#range参数可以选择需要的矩形区域,例如,这儿是”A3:L16”

#查看读取到的数据的基本信息
str(dataset)
#解析
#通过此函数可以看到各个列的数据类型是否如预期
#如果数据类型非预期的话则手动调整 例如调用as.xx()函数

#改变dataset的结构
#解析
dataset的原始数据格式类似这样:
Type    Fe  Cu  Al
a       28  5   (无数据的意思)
b       20  0   6
但若想做出叠加图的那种效果,需要使现在的多维变量降维!
只有降低维度,才能达到x-y的对应效果,这样才能让计算机作图
需要达到的数据格式如下:
Type    variable    value
a       Fe          28  
a       Cu          5   
a       Al      
b       Fe          20  
b       Cu          0
b       Al          6
#首先下载相关可以给“数据整形”的包:reshape2
install.packages(“reshape2”)
#使用这个包
library(“reshape2”)
#使用这个包里的“整形”函数
dat.m<-melt(dataset,id.vars=”Type”)
#解析
#第一个参数的意思是源数据集,此处即我们从excel中读取的数据
#id.vars参数的意思是,我们标志变量的名字是哪一个,因为只有给定了标志变量,
#才能以该变量为基准进行变形

#查看整形后的数据
head(dat.m)
#解析
head()函数表示显示数据集里的前6条数据

#查看整形后的数据结构
str(dat.m)
#注意,发现结构不对后应进行调整
#调整结构,将dat.m中的value列变为数字类型
dat.m$value<-as.numeric(dat.m$value)
#解析
#因为从str(dat.m)我们可以看到,value列变成了ch即字符串类型,显然是不对的
#注意
#还可以显示的将数据为空的行去掉
bar.m<-na.omit(bar.m)

#开始做图形对象
p<-ggplot(data=dat.m,aes(x=Type,y=value,fill=variable))
#解析
#fill参数表明用的填充是什么
#这个例子中是Fe,Cu,Al...等,相当于一共有这些分类,因此填充的颜色数目就是这些分类#数目

#在之前的图形对象上加上图层
bar<-p+geom_bar(stat=”identity”)
#解析
#stat参数表明用的统计类型是什么
#默认的统计雷星是count,即自动的根据图形对象中的x参数将数据分类,每个分类下的数量#作为纵坐标(也就是条形图的高度)
#这儿使用identity参数表明根据变量自身的“值”来确定y坐标

#查看现在图形的样子
bar

#可以发现,x坐标的label相隔太近了,因此需要做调整,变为垂直
bar<-bar+theme(axis.text.x=element_text(angle=90,hjust=1))
#解析
#axis.text.x=element_text()是固定的参数调用形式
#在里面写上需要的参数
#angle表示旋转90度,hjust表明对齐方式,0:左对齐,0.5居中对齐,1:右对齐

#查看现在图形
bar

#改变图例的标题
bar<-bar+scale_fill_discrete(name=”element”)

#查看现在图形
bar

#使图形水平放置
bar<-bar+coord_flip()

#查看现在图形
bar
### 使用R语言中的ggplot2库绘制条形图 在R语言中,`ggplot2` 是一个功能强大的数据可视化工具包,它基于图形语法(Grammar of Graphics),允许用户通过分层的方式来构建复杂的图表。以下是使用 `ggplot2` 绘制条形图的示例代码和方法[^1]。 #### 示例数据集 为了演示如何绘制条形图,可以使用内置的 `mtcars` 数据集。该数据集包含关于汽车的各种信息,例如气缸数 (`cyl`) 和马力 (`hp`) 等。 ```r # 加载 ggplot2 包 library(ggplot2) # 查看 mtcars 数据集的结构 str(mtcars) ``` #### 基本条形图 以下是一个简单的条形图示例,展示不同气缸数 (`cyl`) 的汽车数量。 ```r # 绘制基本条形图 ggplot(data = mtcars, aes(x = factor(cyl))) + geom_bar() + labs(title = "Basic Bar Chart", x = "Number of Cylinders", y = "Count") + theme_minimal() ``` 上述代码中,`aes(x = factor(cyl))` 将 `cyl` 转换为因子类型以便正确绘制条形图[^4]。 #### 水平条形图 如果需要绘制水平条形图,可以使用 `coord_flip()` 函数来旋转坐标轴。 ```r # 绘制水平条形图 ggplot(data = mtcars, aes(x = factor(cyl))) + geom_bar() + labs(title = "Horizontal Bar Chart", x = "Number of Cylinders", y = "Count") + coord_flip() + theme_minimal() ``` #### 分组条形图 当需要比较多个变量时,可以使用分组条形图。以下是一个示例,展示不同气缸数 (`cyl`) 和齿轮数 (`gear`) 的组合。 ```r # 创建一个新的数据框以简化绘图 data <- mtcars %>% group_by(cyl, gear) %>% summarise(count = n()) # 绘制分组条形图 ggplot(data, aes(x = factor(cyl), y = count, fill = factor(gear))) + geom_bar(stat = "identity", position = "dodge") + labs(title = "Grouped Bar Chart", x = "Number of Cylinders", y = "Count", fill = "Gear") + theme_minimal() ``` 上述代码中,`position = "dodge"` 参数用于将同一类别下的条形分开显示[^2]。 #### 堆叠条形图 堆叠条形图可以用于展示每个类别的组成部分。 ```r # 绘制堆叠条形图 ggplot(data, aes(x = factor(cyl), y = count, fill = factor(gear))) + geom_bar(stat = "identity") + labs(title = "Stacked Bar Chart", x = "Number of Cylinders", y = "Count", fill = "Gear") + theme_minimal() ``` #### 自定义颜色和主题 可以通过调整颜色和主题来自定义条形图的外观。 ```r # 自定义颜色和主题 ggplot(data, aes(x = factor(cyl), y = count, fill = factor(gear))) + geom_bar(stat = "identity", position = "dodge") + scale_fill_manual(values = c("blue", "green", "red")) + labs(title = "Customized Grouped Bar Chart", x = "Number of Cylinders", y = "Count", fill = "Gear") + theme_classic() ``` 以上代码展示了如何使用 `scale_fill_manual` 函数自定义填充颜色[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值