【问题标题】:R: Create suplots for each row in dataframeR:为数据框中的每一行创建子图
【发布时间】:2016-06-01 15:28:42
【问题描述】:

我有以下数据框:

V1 V2 V3 V4 V5
A  0  3  1  0
R  4  2  0  0
Q  0  2  4  0

V1 是标识符,残差列类似于实际数据。

我想为此数据框中的每一行创建条形图。我尝试使用melt 重塑为长格式并将问题矢量化,但没有成功。有没有不需要写函数的方法?

编辑: 这是我最后希望看到的(只是原理布局):

https://plot.ly/~MattSundquist/11035.png

【问题讨论】:

标签: r dataframe bar-chart subplot


【解决方案1】:

这样做怎么样?

library(tidyr)
library(dplyr)

df_n <- gather(df, key = V1)
names(df_n) <- letters[1:3]
ggplot(df_n, aes(a, c, fill=b)) + geom_bar(position="dodge", stat="identity")

编辑版本:

使用分面:

ggplot(df_n, aes(a, c, fill=b)) + geom_bar(position="dodge", stat="identity") + facet_grid(.~a, scales = "free")

【讨论】:

  • 真的很好。但我再次要求子图不是一个。谢谢。
  • 刻面怎么样?
  • 我对 R 的经验很少。对此感到抱歉。我想要一些不错的子图,并且看到了par(mfrow=c(n,m)) 的一些很好的使用。因此我使用read.csvfunction 导入了我的数据。显然,从 data.frame 绘图并不是那么简单。感谢您的意见。
【解决方案2】:

我只写了一篇专栏,但你明白我的想法:

df = data.frame(v1 = c('A', 'R', 'Q'), v2 = c(0,4,0))
dat1 = split(df, df$v1)
str(dat1)
lapply(dat1, FUN=function(x) ggplot(data=x, aes(v1, v2)) + geom_bar(stat="identity"))

【讨论】:

    【解决方案3】:

    这是你想要的吗:

    d<-data.frame(V1=c('A','R','Q'),V2=c(0,4,0),
                   V3=c(3,2,2),V4=c(1,0,4),V5=c(0,0,0))
    rownames(d)<-d[,1]
    barplot(t(as.matrix(d[,-1])),beside=T) # barplots for group A, R, Q.
    

    【讨论】:

    • 非常感谢。它确实绘制了除一个情节之外的所有内容。我想稍后使用par(mfrow=c(2,2))
    • 然后试试:par(mfrow=c(2,2)); apply(d[,-1],2,barplot)
    • 按预期生成多个图,但具有每个图中的所有值。
    猜你喜欢
    • 2020-06-05
    • 2022-08-20
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2019-09-04
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多