[英]How to print boxplots for each row of a dataset in R?
这是一个示例数据,我想知道如果要在R中分别对Day1,Day2 ... Day6进行箱装stock1,stock2,stock 3和stock4的绘图,该怎么办?
head(StockExample)
X1 Stock1 Stock2 Stock3 Stock4
1 Day1 185.74 1.47 1605 95.05
2 Day2 184.26 1.56 1580 97.49
3 Day3 162.21 1.39 1490 88.57
4 Day4 159.04 1.43 1520 85.55
5 Day5 164.87 1.42 1550 92.04
6 Day6 162.72 1.36 1525 91.70
因此,每天有6个箱型图,每个箱型图中都有1-4个库存。 希望我有道理。 另外,我可以使用apply函数执行此操作吗?
我试图为此寻找答案,但是找不到正确的答案。 感谢这方面的帮助。 非常感谢!
开发一个好的做法是“收集”库存列。 像下面这样的东西应该起作用。 (但我尚未对此进行测试。)
require(tidyverse)
require(stringr)
StockExample %>%
tidyr::gather(key = "Stock", value = "value", -X1) %>%
dplyr::mutate(day = stringr::str_replace(X1, "Day", "") %>% as.numeric() ) %>%
dplyr::mutate(Stock = stringr::str_replace(Stock, "Stock", "") %>% as.numeric() ) %>%
ggplot(aes(x = day, y = value)) +
geom_boxplot()
(以上代码使用作用域, packagename::functionname
来指示tidyverse中用于执行某些操作的特定功能。
有几种方法可以做到这一点,以上两种都要求数据采用长格式。
为了重新格式化数据,我将使用来自reshape2
包的功能melt
。
long <- reshape2::melt(StockExample, id.var = "X1")
现在是图。
首先,使用基本R图形。
boxplot(value ~ X1, long)
其次,使用ggplot2
软件包。
library(ggplot2)
ggplot(long, aes(X1, value)) +
geom_boxplot()
数据。
StockExample <-
structure(list(X1 = structure(1:6, .Label = c("Day1", "Day2",
"Day3", "Day4", "Day5", "Day6"), class = "factor"), Stock1 = c(185.74,
184.26, 162.21, 159.04, 164.87, 162.72), Stock2 = c(1.47, 1.56,
1.39, 1.43, 1.42, 1.36), Stock3 = c(1605L, 1580L, 1490L, 1520L,
1550L, 1525L), Stock4 = c(95.05, 97.49, 88.57, 85.55, 92.04,
91.7)), class = "data.frame", row.names = c("1", "2", "3", "4",
"5", "6"))
您可以获取长格式的数据,然后使用ggstatsplot
直接进行ggstatsplot
:
# needed libraris
library(tidyverse)
library(ggstatsplot)
# provided data sample
df <- read.table(
text = "Row Day Stock1 Stock2 Stock3 Stock4
1 Day1 185.74 1.47 1605 95.05
2 Day2 184.26 1.56 1580 97.49
3 Day3 162.21 1.39 1490 88.57
4 Day4 159.04 1.43 1520 85.55
5 Day5 164.87 1.42 1550 92.04
6 Day6 162.72 1.36 1525 91.70",
header = TRUE
) %>%
tibble::as_data_frame()
# converting to long format
(
df_long <- df %>%
tidyr::gather(
data = .,
key = "stock type",
value = "stock value",
Stock1:Stock4
)
)
#> # A tibble: 24 x 4
#> Row Day `stock type` `stock value`
#> <int> <fct> <chr> <dbl>
#> 1 1 Day1 Stock1 186.
#> 2 2 Day2 Stock1 184.
#> 3 3 Day3 Stock1 162.
#> 4 4 Day4 Stock1 159.
#> 5 5 Day5 Stock1 165.
#> 6 6 Day6 Stock1 163.
#> 7 1 Day1 Stock2 1.47
#> 8 2 Day2 Stock2 1.56
#> 9 3 Day3 Stock2 1.39
#> 10 4 Day4 Stock2 1.43
#> # ... with 14 more rows
# plot
ggstatsplot::ggbetweenstats(
data = df_long,
x = Day,
y = `stock value`,
plot.type = "box"
)
由reprex软件包 (v0.2.0.9000)创建于2018-08-26。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.