【问题标题】:Generate one plot for each row of dataframe为每一行数据框生成一个图
【发布时间】:2016-10-10 04:56:58
【问题描述】:

我正在处理这个数据框:

Col0 <- c("AA", "BB", "CC", "DD","EE","FF")
Col1 <- c(2,2,2,6,1,1)
Col2 <- c(2,2,2,1,3,4)
Col3 <- c(2,2,3,4,6,6)
Col4 <- c(2,2,3,1,2,1)
Col5 <- c(2,1,1,1,1,4)
Col6 <- c(2,4,2,5,4,4)
Col7 <- c(2,4,2,5,4,4)
Col8 <- c(2,2,3,4,5,4)
Col9 <- c(1,3,3,2,2,2)
df<-data.frame(Col0,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9)

我使用 ggplot2 创建了一个情节

Plot <- function(fun){

  df<-melt(fun,id =c("Col0"))
  colnames(df)[colnames(df) == 'value'] <- 'Val'
  colnames(df)[colnames(df) == 'variable'] <- 'Col_i'
  pl<- ggplot(df, aes(Col_i, Val, group=Col0)) + geom_line(aes(color=Col0))+theme(
    axis.text.x = element_text(angle = 90, hjust = 1))+ ggtitle(paste("Plot"))+  labs(color = "Letters")+ theme( panel.border = element_rect(colour = "black", fill=NA, size=1))  
  print(pl)
} 
Plotf <- Plot(df)

从 df 可以有 n 行的假设开始,我需要知道如何用一个函数打印 n 个图(每行一个)。

【问题讨论】:

  • 也许在行上使用applyfor 循环算作一个函数吗?对于绘图活动,循环的“缓慢”并不是真正的问题,因为绘图速度要慢得多。而且循环更具可读性。
  • 考虑转置你的数据框
  • 问题是我是一个真正的初学者,我不知道如何做和使用你的建议
  • 请参阅this post about how to convert from wide to long format,并阅读有关 ggplot 方面、组的信息。
  • @zx8754 问题是它给我一个错误,因为我只能从 Col0 值中分面,这是不可能的

标签: r ggplot2


【解决方案1】:

转置然后用刻面绘图,见下文:

library(tidyr)
library(dplyr)
library(ggplot2)

df %>%
  gather(Col, Val, -Col0) %>%
  ggplot(aes(Col, Val, group = Col0, col = Col0)) +
  geom_line() +
  facet_grid(Col0 ~ .)

要分别绘制每个组,请尝试以下操作:

# split data for plotting
plotDat <- df %>%
  gather(Col, Val, -Col0)%>%
  split(Col0)

pdf("plots.pdf")
lapply(names(plotDat), function(i){
  ggplot(plotDat[[i]], aes(Col, Val, group = Col0, col = Col0)) +
    geom_line() +
    ggtitle(paste("Plot", i))
  })
dev.off()

【讨论】:

  • 我工作得很好,谢谢。问题是我需要为每条线绘制不同的图,而不是分割成更多部分的统一图。这是因为我有大量数据,我不希望它不可读
  • @juse 查看编辑以在 PDF 文件的单独页面上有多个绘图。
  • 这太棒了。有没有办法让每行有两个图表,以便整个图表可以容纳 12 行而不是 6 行?
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
相关资源
最近更新 更多