在单个命令中为每一行绘制数据

时间:2019-01-20 12:23:51

标签: r plot row

我是R新手,需要以下帮助。

我有以下数据

# Simulate matrix of integers 
set.seed(1) 
df <- matrix(sample.int(5, size = 3*5, replace = TRUE), nrow = 3, ncol = 5)
print(df)
df <- tbl_df(df)  # tabulate as dataframe 
df <- rbind(df, c(3,5,4,1,4)) 
print(df)

在一个命令中,我需要绘制每行的数据,以便y轴:每行中的数据(在我的情况下,这些是从1到5的值); x轴:指向每一列的值1,2,3,4,5。如此有效地,对于每一行,我正在尝试绘制每一列的行值变化情况。

我尝试了以下方法,该方法可以工作,但有两个问题需要解决。首先,这一次只能绘制1行。这不是一种有效的处理方式,尤其是当行数很多时。其次,我找不到将x轴称为列数的方法,因此我只能简单地计算列数(即5),然后将ac(1:5)向量表示为列数。我还尝试将ncol(df)表示为x轴,但这返回一个错误,指出变量的长度不同。确实,当请求ncol(df)时,它返回数字5,这是列数,但它没有执行我想要的操作,即依次表示列数为1,2,3,4,5。

 plot(c(1:5),df[1,], type = "b", pch=19,
 col = "blue", xlab = "number of columns", ylab = "response format")

谢谢,非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您可以这样做:

library(tidyverse)

df %>%
  mutate(row_number = as.factor(row_number())) %>%
  gather(columns, responses, V1:V5) %>%
  ggplot(aes(x = columns, y = responses, group = row_number, color = row_number)) +
  geom_line() + geom_point()

输出:

enter image description here

这是什么:

  • 为每行创建一个ID(row_number);
  • 将数据帧转换为长格式,其中columns的第一列,responses的另一列;
  • 在一张图表上绘制所有内容,其中每种颜色代表一行。

您还可以通过添加facet_wrap来稍微改变图形,使每条线(行)都有自己的图表,例如:

df %>%
  mutate(row_number = as.factor(row_number())) %>%
  gather(columns, responses, V1:V5) %>%
  ggplot(aes(x = columns, y = responses, group = row_number, color = row_number)) +
  geom_line() + geom_point() +
  facet_wrap(~ row_number)

输出:

enter image description here