Closed ixxmu closed 7 months ago
A quantitative genomics map of rice providesgenetic insights and guides breeding
https://doi.org/10.1038/s41588-020-00769-9
宽长数据转换,经常用到这里稍作简介。
在R语言中,可以使用tidyr
包中的gather()
函数将宽数据转换为长数据。以下是一个示例:
假设有以下的宽数据:
data_wide <- data.frame(
ID = c(1, 2, 3),
Age_0 = c(25, 30, 28),
Age_1 = c(26, 31, 29),
Age_2 = c(27, 32, 30)
)
可以使用gather()
函数将它转换为长数据:
library(tidyr)
data_long <- gather(data_wide, key = "Age_Category", value = "Age", -ID)
在这个示例中,key
参数指定了新的列名,用于存储原始列的名称,而value
参数指定了新的列名,用于存储原始列的值。-ID
表示不包括ID列在内进行转换。
现在,data_long
包含了转换后的长数据。结果如下:
ID Age_Category Age
1 1 Age_0 25
2 2 Age_0 30
3 3 Age_0 28
4 1 Age_1 26
5 2 Age_1 31
6 3 Age_1 29
7 1 Age_2 27
8 2 Age_2 32
9 3 Age_2 30
这样,宽数据就被转换成了长数据。可以根据实际情况修改列名和数据框的名称。
使用tidyr
包中的spread()
函数将长数据转换为宽数据。以下是一个示例:
假设你有以下的长数据:
data_long <- data.frame(
ID = c(1, 1, 2, 2),
Variable = c("A", "B", "A", "B"),
Value = c(10, 20, 30, 40)
)
可以使用spread()
函数将它转换为宽数据:
library(tidyr)
data_wide <- spread(data_long, key = Variable, value = Value)
在这个示例中,key
参数指定了原始数据中的列名,用于创建新的列,而value
参数指定了原始数据中的值列,用于填充新的列。spread()
函数会自动创建新的列,并将相应的值填充到这些列中。
现在,data_wide
包含了转换后的宽数据。结果如下:
ID A B
1 1 10 20
2 2 30 40
# 数据因子化 调整顺序
tbl$class<-factor(tbl$class,
levels = c('Lily' , 'Luck' , 'Blessing' , 'Charm' , 'Happiness' , 'Magic'))
tbl$group<-factor(tbl$group,
levels = c("Northeast",
"East",
"Southeast"))
这段代码是对数据框(或表格)中的两列进行因子化操作,并调整它们的顺序。
对tbl
数据框中的class
列进行因子化操作:
factor()
函数将class
列转换为因子型变量。levels
参数指定了因子水平的顺序,即类别的顺序。'Lily'
、'Luck'
、'Blessing'
、'Charm'
、'Happiness'
和'Magic'
。对tbl
数据框中的group
列进行因子化操作:
factor()
函数将group
列转换为因子型变量。levels
参数指定了因子水平的顺序,即分组的顺序。"Northeast"
、"East"
和"Southeast"
。通过这些操作,class
列和group
列都被转换为了因子型变量,并且它们的水平顺序被设置为指定的顺序。这可以用于控制在绘制图表或进行分析时类别或分组的顺序。
ggplot(data=tbl,aes(x=class,y=DEGNumber))+
geom_col(aes(fill=group),
position = position_dodge(0.3),
width = 0.3,
show.legend = T)
ggplot(data=tbl,aes(x=class,y=DEGNumber))+
geom_col(aes(fill=group),
position = position_dodge(0.3),
width = 0.3,
show.legend = T)+
labs(x="",
y="DEGNumber")+
scale_fill_manual(values = c("#00C5FF",
"#E6E600",
"#73B273"))+
coord_cartesian(ylim=c(-0.05,13000))+
scale_y_continuous(expand = c(0, 0))+
theme_classic()+
theme(legend.direction = "horizontal",
legend.position = c(0.75, 0.9),
legend.title = element_text(colour = "white")
)
ggplot(data=tbl,aes(x=class,y=DEGNumber))+
geom_col(aes(fill=group),
position = position_dodge(0.3),
width = 0.3,
show.legend = T)+
labs(x="",
y="DEGNumber")+
scale_fill_manual(values = c("#00C5FF",
"#E6E600",
"#73B273"))+
coord_cartesian(ylim=c(-0.05,13000))+
scale_y_continuous(expand = c(0, 0))+
theme_classic()+
theme(legend.direction = "horizontal",
legend.position = c(0.7, 0.9),
legend.title = element_text(size=0),
text = element_text(family = 'serif')
)
新罗马一用就感觉贼高级
ggplot(data=tbl,aes(x=class,y=DEGNumber))
:这是创建ggplot2图形对象的开始。data
参数指定数据框为tbl
,aes()
函数定义了图形的映射关系,x=class
表示将class
列用作x轴,y=DEGNumber
表示将DEGNumber
列用作y轴。
geom_col(aes(fill=group), position = position_dodge(0.3), width = 0.3, show.legend = T)
:这是添加柱状图层。geom_col()
函数用于创建柱状图,aes(fill=group)
表示根据group
列的不同取值进行填充颜色,position = position_dodge(0.3)
表示将柱子进行分组,width = 0.3
表示柱子的宽度,show.legend = T
表示显示图例。
labs(x="", y="DEGNumber")
:这里设置了x轴和y轴的标签,将x轴标签设置为空字符串,y轴标签设置为"DEGNumber"。
scale_fill_manual(values = c("#00C5FF", "#E6E600", "#73B273"))
:使用scale_fill_manual()
函数手动设置填充颜色的映射关系,指定了三种颜色:蓝色(#00C5FF
)、黄色(#E6E600
)和绿色(#73B273
),分别对应不同的group
值。
coord_cartesian(ylim=c(-0.05,13000))
:使用coord_cartesian()
函数设置y轴的坐标范围,限定y轴的范围在-0.05到13000之间。
scale_y_continuous(expand = c(0, 0))
:使用scale_y_continuous()
函数设置y轴的连续刻度,expand = c(0, 0)
表示不要扩展刻度。
theme_classic()
:使用theme_classic()
函数设置图表的基本主题风格。
theme(legend.direction = "horizontal", legend.position = c(0.75, 0.9), legend.title = element_text(colour = "white"), text = element_text(family = 'serif'))
:设置图表的主题选项。其中:
legend.direction = "horizontal"
设置图例的方向为水平。legend.position = c(0.75, 0.9)
设置图例的位置在图表的右上角。legend.title = element_text(colour = "white")
设置图例标题的颜色为白色。text = element_text(family = 'serif')
设置图表中的文本字体为serif字体。目的是创建一个带有分组柱状图的ggplot2图形,其中包含了各种视觉和主题设置,以定制和美化图表。可以根据需要进一步调整这些设置以满足特定的图表需求。
下期实现分面绘图,搞成文献那样的组合图,legend还要单独放一块。
https://mp.weixin.qq.com/s/DKeXXAweil_dd3kwG8zIBw