我在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
我有什么问题?
答案 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格式。有几个常用的包,如tidyr
和reshape2
。它看起来像这样:
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)
编辑:在绘图之外绘制图例,在图表外定义x
和y
坐标。检查?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)
答案 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()