Как построить две линии из двух столбцов фрейма данных и масштабировать ось y с помощью пакета ggplot - PullRequest
2 голосов
/ 10 апреля 2019

Я пытаюсь сравнить значения двух столбцов моего фрейма данных.Я хотел бы использовать 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), вот моя команда для построения значений: </p>

 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 ]

2 голосов
/ 10 апреля 2019

Вы можете использовать scale_y_continuous() с аргументом limit в ggplot.Если только для целей заговора, нет необходимости транспонировать.Учитывая разницу между вашими двумя линиями и общим диапазоном точек данных на оси 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")
0 голосов
/ 10 апреля 2019

Я согласен с @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")
...