R ggplot2-为数据帧的每一列创建条形图
我知道这个问题很基本,但我是一个完全的初学者,我一整天都在尝试为数据帧的每一列绘制单独的图形。任何帮助都是非常有用的 以下是数据:R ggplot2-为数据帧的每一列创建条形图,r,dataframe,ggplot2,plot,R,Dataframe,Ggplot2,Plot,我知道这个问题很基本,但我是一个完全的初学者,我一整天都在尝试为数据帧的每一列绘制单独的图形。任何帮助都是非常有用的 以下是数据: > 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
> 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)绘制一个条形图。每个条形图有4个条形图(一个条形图对应极低类别,另一个条形图对应较低类别,另一个条形图对应中等类别,另一个条形图对应较高类别)。
如果图的标题是(X0035.A061、X0094.B116和X0314.A038)那就太好了,图中的每一条都有相应的标签(verylow、low、medium和high)
谢谢你这里有一个选择
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
这里有一个解决方案,它使用
melt()
和fread()
函数的data.table
包,使用facet\u grid()
fromggplot2
将所有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)
到目前为止您尝试了什么?您是否可以通过共享您的数据样本和您正在处理的代码使您的问题重现,以便其他人能够提供帮助(请不要使用
str()
,head()
或屏幕截图)?您可以使用和包来帮助您实现这一点。也请考虑一些建议,在你看来,可以改善答案。我希望我能再次投票,我花了一个多小时寻找一个方法来做到这一点。谢谢
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)