在折线图中的多行中添加更多行?

时间:2017-09-21 17:50:49

标签: r

我在R类'折线图中的多行'中做了一个图表,我想在同一个图表中绘制6个向量,每个向量有5个数字。

问题是我没有绘制超过2行,当我尝试绘制第3行时,它没有向我显示任何内容。

it1 <- c(1406, 1504, 1623, 1405, 1447)
it2 <- c(1565, 1496, 1555, 1590, 1555)
it3 <- c(459, 534, 534, 626, 626)
it4 <- c(642, 643, 482, 661, 651)
it5 <- c(538, 558, 456, 393, 551)
it6 <- c(521, 517, 466, 456, 496)

plot(it1,type="l",col="red")
lines(it2, col="green")
lines(it3, col="blue") #bad

我有什么问题?

3 个答案:

答案 0 :(得分:2)

它没有显示,因为it3完全低于第一个绘图设置的轴范围。添加这样的后续图时,它不会重新缩放轴,而是使用缩放到第一个图的轴。您可以在第一个绘图中手动指定轴范围,然后全部显示;但是,我建议使用ggplot2之类的东西来做这件事。

plot(it1,type="l",col="red", ylim = c(0, 1800))
lines(it2, col="green")
lines(it3, col="blue") #now works

如果您想使用常用的ggplot2软件包,则必须将数据重塑为long格式。有几个常用的包,如tidyrreshape2。它看起来像这样:

it_lines <- data.frame(it1,it2,it3,it4,it5,it6)
it_lines$index <- row.names(it_lines)

# Reshape into long format for ggplot2 - requires tidyr, but can be done 
# with other approaches like reshape2's melt/cast
it_lines <- tidyr::gather(it_lines, key = it, value = value, it1:it6)

# Plot
library(ggplot2)
ggplot(it_lines, aes(x = index, y = value, group = it, colour = it)) + 
geom_line()

答案 1 :(得分:0)

尝试matplot

    it1 <- c(1406, 1504, 1623, 1405, 1447)
    it2 <- c(1565, 1496, 1555, 1590, 1555)
    it3 <- c(459, 534, 534, 626, 626)
    it4 <- c(642, 643, 482, 661, 651)
    it5 <- c(538, 558, 456, 393, 551)


it = data.frame(it1, it2, it3, it4, it5)

matplot(it, type = c("b"),pch=1,col = 1:5) 
legend("center", legend = 1:5, col=1:5, pch=1) 

编辑:在绘图之外绘制图例,在图表外定义xy坐标。检查?legend以获取更多选项。

par(xpd=TRUE)
matplot(it, type = c("b"),pch=1,col = 1:5) 
legend(x = 2, y = 1850, legend = 1:5, col=1:5, pch=1, horiz= T) 

enter image description here

答案 2 :(得分:0)

或者您可以简单地使用ggplot2和一些tidyverse工具来绘制所有内容并制作看起来比matplotlib更好的内容:

it1 <- c(1406, 1504, 1623, 1405, 1447)
it2 <- c(1565, 1496, 1555, 1590, 1555)
it3 <- c(459, 534, 534, 626, 626)
it4 <- c(642, 643, 482, 661, 651)
it5 <- c(538, 558, 456, 393, 551)
it6 <- c(521, 517, 466, 456, 496)

library(tidyverse)

data <- tibble(index = 1:5, it1,it2,it3,it4,it5,it6) %>%
  gather(var, value, -index)

ggplot(data, aes(x = index, y = value, colour = var)) +
  geom_line()

enter image description here