我知道这个问题确实很基本,但是我是一个初学者,我整天都在尝试为数据帧的每一列绘制单独的图。任何帮助都将非常有用
以下是数据:
> dfslices
X0035.A061 X0094.B116 X0314.A038
verylow 19.48052 8.127208 36.8243243
low 2.96846 9.069494 7.4324324
medium 0.00000 2.237927 0.3378378
high 0.00000 0.000000 1.6891892
基本上,每列(X0035.A061,X0094.B116和X0314.A038)都需要一个barplot。每个条形图都有4条(一条对应于非常低的类别,另一条对应于低,另一条对应于中,另一条对应于高)。 图表的标题是(X0035.A061,X0094.B116和X0314.A038),并且图表的每个小节都有相应的标签(非常低,低,中和高),这会很好。
谢谢
答案 0 :(得分:5)
以下是使用data.table
和melt()
函数的fread()
程序包,并使用facet_grid()
中的ggplot2
绘制所有3个问题的一种解决方案原始列作为单个图上的单独面板显示。
library(data.table)
library(ggplot2)
# Convert text data to data.table using fread() from the data.table package.
dfslice = fread("category X0035.A061 X0094.B116 X0314.A038
verylow 19.48052 8.127208 36.8243243
low 2.96846 9.069494 7.4324324
medium 0.00000 2.237927 0.3378378
high 0.00000 0.000000 1.6891892")
# Convert data to 'long form' using melt() from the data.table package.
mtab = melt(dfslice, id.vars="category")
# Manually set factor levels of 'category' column to plot in a logical order.
mtab$category = factor(mtab$category,
levels=c("verylow", "low", "medium", "high"))
mtab
# category variable value
# 1: verylow X0035.A061 19.4805200
# 2: low X0035.A061 2.9684600
# 3: medium X0035.A061 0.0000000
# 4: high X0035.A061 0.0000000
# 5: verylow X0094.B116 8.1272080
# 6: low X0094.B116 9.0694940
# 7: medium X0094.B116 2.2379270
# 8: high X0094.B116 0.0000000
# 9: verylow X0314.A038 36.8243243
# 10: low X0314.A038 7.4324324
# 11: medium X0314.A038 0.3378378
# 12: high X0314.A038 1.6891892
p = ggplot(data=mtab, aes(x=category, y=value, fill=category)) +
geom_bar(stat="identity") +
scale_fill_viridis_d() +
facet_grid(. ~ variable)
ggsave("faceted_barplot.png", plot=p, width=7.5, height=2.5, dpi=150)
答案 1 :(得分:3)
这是一个选择
suspend fun uploadFile(path: Path) {
...
val asyncFile: AsyncFile = awaitResult { fs.open(path.toString(), OpenOptions(), it) }
val methodType: HttpMethod = when (link.method.toLowerCase()) {
"put" -> HttpMethod.PUT
"post" -> HttpMethod.POST
else -> throw UnsupportedOperationException("Method is not supported")
}
val request: HttpRequest<Buffer> = webClient.requestAbs(methodType, link.href)
val response: HttpResponse<Buffer> = awaitResult { request.sendStream(asyncFile, it) }
}
这个想法是创建一个数据帧列表,每个数据帧包含library(purrr)
library(tibble) # rownames_to_column
library(ggplot2)
plots <- split.default(dfslices, names(dfslices)) %>%
map(., setNames, nm = "col") %>%
map(., rownames_to_column) %>%
map(., mutate, rowname = factor(rowname, levels = c("verylow", "low", "medium", "high"))) %>%
imap(., ~ {
ggplot(.x, aes(rowname, col)) +
geom_col() +
labs(title = .y)
})
plots$X0035.A061
的一列。我们使用dfslices
创建该列表。
在接下来的两行中,我们将每个数据框中的列重命名为“ col”,并为每个数据框将其行名转换为显式列。下一步,将列split.default
转换为因数并相应地设置其水平。
最后可以使用rowname
遍历列表,并遍历列表中由imap
表示的名称。我们使用.y
作为.y
的参数,以使每个图的标题与(以前的)列名相对应。
数据
labs