如何使用ggplot包从数据框的两列绘制两条线并缩放y轴

时间:2019-04-10 03:46:01

标签: r dataframe ggplot2 ggplotly

我正在尝试比较数据框两列的值。我想使用ggplot并绘制两条线,以指示第一列中的所有值都大于第二列。

这是我的df:

C1 <- c(-1.363953,4.265514,5.609484,7.524796,2.562210,7.214769, 4.667354,4.950837,4.134733,7.540626)
C2 <- c(-1.541836,4.248582,5.557042,7.475255,2.424585,7.125046,4.524404  4.890195,3.945435,7.488123)
C3 <- seq(1:10)
Name <- paste(letters[1:10])
df <- data.frame(Name = paste(letters[1:10]), C1, C2,C3)


Name        C1        C2.     C3
 a      -1.363953   -1.541836  1
 b       4.265514    4.248582  2
 c       5.609484    5.557042  3
 d       7.524796    7.475255  4
 e       2.562210    2.424585  5
 f       7.214769    7.125046  6
 g       4.667354    4.524404  7
 h       4.950837    4.890195  8
 i       4.134733    3.945435  9
 j       7.540626    7.488123 10

首先,我要转置数据。     tt <-t(df) 这是我的命令来绘制值:

 matplot(x<- 1:10, cbind(tt[2,],tt[3,]),type="l",col=c("red","green"),lty=c(1,1))

由于值非常接近,因此在绘图中我看不到差异。 enter image description here

我想使用ggplot函数并缩放y轴,以便可以更好地看到两行的差异。

您知道我该怎么做吗? 谢谢

2 个答案:

答案 0 :(得分:2)

您可以将scale_y_continuous()与ggplot中的limit参数一起使用。如果仅出于绘图目的,则无需转置。考虑到两条线之间的差异以及y轴上数据点的总跨度,您将永远无法真正使它们之间的差异更容易看到而不会丢失一些数据点。您可以尝试在不同的颜色背景上使用不同的颜色线或线型,以使差异更加明显吗?

ggplot(data = df, aes(x = C3, y = C1))+
  scale_y_continuous(limits = c(2.4,7.7))+
  geom_line(aes(x = C3, y = C1),colour = "red")+
  geom_line(aes(x = C3, y = C2),colour = "green")

答案 1 :(得分:0)

我同意@divibisan,如果差异很重要,那么您应该考虑仅绘制差异,这样可以更清楚地看到确切的区别。

library(dplyr)
library(ggplot2)

df %>%
  mutate(diff = C1 - C2) %>%
  ggplot() + aes(factor(C3), diff, group = 1) + geom_line()

enter image description here

您也可以使用geom_point(),但我认为geom_line()可以更好地传达它。


或使用基本绘图。

df$diff <- df$C1 - df$C2
plot(df$C3, df$diff, type = "l")