绘制基于因子列

时间:2015-08-05 17:35:51

标签: r plot ggplot2

我有一个类似下面的数据框。这只是54行的前9行。每个流名称重复18次,3个流名称(18 * 3 = 54)

stream     n     1         2         3       means
1   Brooks 3 0.42707006 1.9353659 1.4333884 1.8566225
2  Siouxon 3 0.90503736 0.2838483 0.2838483 1.0023212
3 Speelyai 3 0.08554021 0.7359903 0.4841935 0.7359903
4   Brooks 4 1.43338843 1.8566225 0.0000000 1.3242210
5  Siouxon 4 0.50574543 0.5057454 0.2838483 0.4756304
6 Speelyai 4 0.32252396 0.4343109 0.6653132 2.2294652
7   Brooks 5 0.88984211 1.8566225 0.7741612 1.3242210
8  Siouxon 5 0.47501800 0.7383634 0.5482181 0.6430847
9 Speelyai 5 0.15079491 0.2615963 0.4738504 0.0000000

我还创建了vector个值。有18个不同的值。每个流(总共3个)具有与该向量中的值相关的平均值。例如,数据帧中的前三行与向量(3)中的第一个值相关。接下来的三行(4:6)与向量(7.5)中的第二个值相关。事后看来,我应该将数据框中的n列替换为费率向量中的值。这可能更有意义。

rates <- c(3,7.5,10,13,15,17,19.5,22,25.5,28,30.5,32,33.5,36,40.5,44,46,48.5)

我正在尝试在x轴上创建一个带有rates的图,并在y轴上创建一个来自我的数据框的图。但是,我想为每个级别的因子创建一个图,在这种情况下,“stream”是在数据帧中找到的3级因子

Levels: Brooks Siouxon Speelyai

因此,回顾一下,我想对任何一个流采用“均值”列值并在Y轴上绘制它们,并在x上使用rates向量。所以我应该有一个“布鲁克斯”的情节,它将有18分(18表示在费率向量中找到~18个比率)。

我现在已经更改了数据框,因此我可以取消费率向量。这是新的数据框架。

    stream n  rates     means          1         2
1   Brooks 3   3.0     0.9629152 0.42707006 1.9353659
2  Siouxon 3   3.0     0.5831929 0.90503736 0.2838483
3 Speelyai 3   3.0     0.6199235 0.08554021 0.7359903
4   Brooks 4   7.5     0.9722707 1.43338843 1.8566225
5  Siouxon 4   7.5     0.5865031 0.50574543 0.5057454
6 Speelyai 4   7.5     0.6118634 0.32252396 0.4343109
7   Brooks 5  10.0     0.9637475 0.88984211 1.8566225
8  Siouxon 5  10.0     0.5804420 0.47501800 0.7383634
9 Speelyai 5  10.0     0.5959238 0.15079491 0.2615963

我希望这更清晰,更清洁。我仍然希望得到相同的结果,即每个流名称的图(所以三个图)在Y轴上的平均列中具有值,并且在X轴上的值列中具有值

1 个答案:

答案 0 :(得分:0)

您可能正在寻找ggplot中的方面:

library(ggplot2)
ggplot(your_data, aes(x = rates, y = means)) +
  geom_point() +
  facet_wrap(~ stream)

要生成仅包含一个流的绘图,请将数据子集

ggplot(your_data[your_data$stream == "Brooks", ],
       aes(x = rates, y = means)) +
  geom_point() 

单独执行所有流,如下所示:

individual_stream_data = split(your_data, your_data$stream)
individual_stream_plots = lapply(individual_stream_data,
    function(x) {
        ggplot(x, aes(x = rates, y = means)) +
          geom_point() +
          labs(title = x$stream[1])
})

这将生成一个图表列表,因此您可以打印它们或一次保存一次:

 print(individual_stream_plots[[1]])
 print(individual_stream_plots[[3]]) # etc.