如何使用 ggplot 在一帧中为物种丰富度和多样性制作条形图
How to make a barplot with ggplot for species richness and diversity in one frame
我还是 R 的新手,我有一些关于使用 ggplot 的问题和帮助。
我一直在使用 spadeR 在每个采样位置获取物种丰富度和多样性,我想为我的数据可视化制作条形图。但是我在获取 ggplot 的正确代码时遇到了一些麻烦。
这是我想要的数据可视化的示例。
但我的条形图看起来像这样
我想在框架的顶部添加图例,我尝试添加它,但结果很糟糕。
谁能告诉我如何使用 ggplot 解决这个问题,以及如何像上面的示例那样在一帧中制作 2 个条形图,如何使用 parfrow?希望有人能教我如何解决这个问题。非常感谢!
这里是我在 10 个采样点的物种丰富度数据集,包括物种丰富度的估计分数和标准误差。
datalw <- as.matrix(data.frame(Bng = c(8, 0.4),
Krs= c(3, 0),
Bny= c(3, 0),
Kmb= c(9.1, 7.40),
Sgk= c(3, 0.3),
Lwb= c(6.4, 1.0),
Lws= c(4.3, 0.7),
Krm= c(3, 0.5),
Hrt= c(7, 0.5),
Gmb= c(6.5, 1.0)))
rownames(datalw) <- c("Estimates", "s.e")
datalw
barplot(datalw,
col = c("#1b98e0", "#353436"))
legend("top",
legend = c("estimates", "s.e"),
fill = c("#1b98e0", "#353436"))
我不得不稍微研究一下你的数据。您不必将 datalw
设为矩阵,因为它最终会导致问题。您的数据也有多列而不是多行,因此我为您重新设置了数据格式。
datalw <- structure(list(loc = structure(c(1L, 7L, 2L, 5L, 10L, 8L, 9L,
6L, 4L, 3L), .Label = c("Bng", "Bny", "Gmb", "Hrt", "Kmb", "Krm",
"Krs", "Lwb", "Lws", "Sgk"), class = "factor"), V1 = c(8, 3,
3, 9.1, 3, 6.4, 4.3, 3, 7, 6.5), V2 = c(0.4, 0, 0, 7.4, 0.3,
1, 0.7, 0.5, 0.5, 1)), class = "data.frame", row.names = c(NA,
-10L))
由于您想并排放置条形图,因此可以将这些数据融合在一起以更轻松地绘制数据
library(ggplot2)
library(ggpattern)
library(reshape2)
datalw2 <- melt(datalw, id.vars='loc')
有一种方法可以用 ggplot
制作图案,你可以使用 ggpattern
ggplot(datalw2,aes(x=loc, y=value, fill=variable, group=variable, pattern = variable)) +
geom_bar_pattern(stat='identity', position='dodge') +
scale_pattern_manual(values = c(V1 = "stripe", V2 = "crosshatch"))
这将产生这样的情节。有更高级的方法可以更改图片中的图案,但是,您必须自己创建图案,而不是使用 ggpattern
中的默认图案
您的数据没有足够的信息来创建图片中显示的误差线
你也可以像这样把情节黑白化
ggplot(datalw2,aes(x=loc, y=value, fill=variable, group=variable, pattern = variable)) +
geom_bar_pattern(stat='identity', position='dodge') +
theme_bw() +
scale_pattern_manual(values = c(V1 = "stripe", V2 = "crosshatch")) +
scale_fill_grey(start = .9, end = 0)
有一种方法可以像您的图片一样创建并排图,但是您也没有足够的数据来制作第二个图
如果您想将误差线添加到图表中。您可以使用 geom_errorbar
。使用您在下方评论中提供的数据
datadv <- structure(list(caves = structure(c(1L, 7L, 2L, 5L, 10L, 8L, 9L, 6L, 4L, 3L), .Label = c("Bng", "Bny", "Gmb", "Hrt", "Kmb", "Krm", "Krs", "Lwb", "Lws", "Sgk"), class = "factor"), Index = c(1.748, 0.022, 1.066, 1.213, 0.894, 0.863, 1.411, 0.179, 1.611, 1.045), Std = c(0.078, 0.05, 0.053, 0.062, 0.120, 0.109, 0.143, 0.072, 0.152, 0.171)), class = "data.frame", row.names = c(NA,-10L))
library(ggpattern)
library(ggplot2)
ggplot(datadv,aes(x=caves, y=Index)) +
geom_bar_pattern(stat='identity', position='dodge') +
theme_bw() +
scale_pattern_manual(values = c(V1 = "stripe", V2 = "crosshatch")) +
scale_fill_grey(start = .9, end = 0) +
geom_errorbar(aes(ymin=Index-Std, ymax=Index+Std), width=.2,
position=position_dodge(.9))
我还是 R 的新手,我有一些关于使用 ggplot 的问题和帮助。
我一直在使用 spadeR 在每个采样位置获取物种丰富度和多样性,我想为我的数据可视化制作条形图。但是我在获取 ggplot 的正确代码时遇到了一些麻烦。
这是我想要的数据可视化的示例。
但我的条形图看起来像这样
我想在框架的顶部添加图例,我尝试添加它,但结果很糟糕。
谁能告诉我如何使用 ggplot 解决这个问题,以及如何像上面的示例那样在一帧中制作 2 个条形图,如何使用 parfrow?希望有人能教我如何解决这个问题。非常感谢!
这里是我在 10 个采样点的物种丰富度数据集,包括物种丰富度的估计分数和标准误差。
datalw <- as.matrix(data.frame(Bng = c(8, 0.4),
Krs= c(3, 0),
Bny= c(3, 0),
Kmb= c(9.1, 7.40),
Sgk= c(3, 0.3),
Lwb= c(6.4, 1.0),
Lws= c(4.3, 0.7),
Krm= c(3, 0.5),
Hrt= c(7, 0.5),
Gmb= c(6.5, 1.0)))
rownames(datalw) <- c("Estimates", "s.e")
datalw
barplot(datalw,
col = c("#1b98e0", "#353436"))
legend("top",
legend = c("estimates", "s.e"),
fill = c("#1b98e0", "#353436"))
我不得不稍微研究一下你的数据。您不必将 datalw
设为矩阵,因为它最终会导致问题。您的数据也有多列而不是多行,因此我为您重新设置了数据格式。
datalw <- structure(list(loc = structure(c(1L, 7L, 2L, 5L, 10L, 8L, 9L,
6L, 4L, 3L), .Label = c("Bng", "Bny", "Gmb", "Hrt", "Kmb", "Krm",
"Krs", "Lwb", "Lws", "Sgk"), class = "factor"), V1 = c(8, 3,
3, 9.1, 3, 6.4, 4.3, 3, 7, 6.5), V2 = c(0.4, 0, 0, 7.4, 0.3,
1, 0.7, 0.5, 0.5, 1)), class = "data.frame", row.names = c(NA,
-10L))
由于您想并排放置条形图,因此可以将这些数据融合在一起以更轻松地绘制数据
library(ggplot2)
library(ggpattern)
library(reshape2)
datalw2 <- melt(datalw, id.vars='loc')
有一种方法可以用 ggplot
制作图案,你可以使用 ggpattern
ggplot(datalw2,aes(x=loc, y=value, fill=variable, group=variable, pattern = variable)) +
geom_bar_pattern(stat='identity', position='dodge') +
scale_pattern_manual(values = c(V1 = "stripe", V2 = "crosshatch"))
这将产生这样的情节。有更高级的方法可以更改图片中的图案,但是,您必须自己创建图案,而不是使用 ggpattern
您的数据没有足够的信息来创建图片中显示的误差线
你也可以像这样把情节黑白化
ggplot(datalw2,aes(x=loc, y=value, fill=variable, group=variable, pattern = variable)) +
geom_bar_pattern(stat='identity', position='dodge') +
theme_bw() +
scale_pattern_manual(values = c(V1 = "stripe", V2 = "crosshatch")) +
scale_fill_grey(start = .9, end = 0)
有一种方法可以像您的图片一样创建并排图,但是您也没有足够的数据来制作第二个图
如果您想将误差线添加到图表中。您可以使用 geom_errorbar
。使用您在下方评论中提供的数据
datadv <- structure(list(caves = structure(c(1L, 7L, 2L, 5L, 10L, 8L, 9L, 6L, 4L, 3L), .Label = c("Bng", "Bny", "Gmb", "Hrt", "Kmb", "Krm", "Krs", "Lwb", "Lws", "Sgk"), class = "factor"), Index = c(1.748, 0.022, 1.066, 1.213, 0.894, 0.863, 1.411, 0.179, 1.611, 1.045), Std = c(0.078, 0.05, 0.053, 0.062, 0.120, 0.109, 0.143, 0.072, 0.152, 0.171)), class = "data.frame", row.names = c(NA,-10L))
library(ggpattern)
library(ggplot2)
ggplot(datadv,aes(x=caves, y=Index)) +
geom_bar_pattern(stat='identity', position='dodge') +
theme_bw() +
scale_pattern_manual(values = c(V1 = "stripe", V2 = "crosshatch")) +
scale_fill_grey(start = .9, end = 0) +
geom_errorbar(aes(ymin=Index-Std, ymax=Index+Std), width=.2,
position=position_dodge(.9))