#r #na #missing-data #line-plot
#r #na #отсутствует-данные #линейный график
Вопрос:
У меня есть две переменные, которые я хочу отобразить в R, в одной из них (B) отсутствуют некоторые точки данных. Я хочу провести линию между существующими точками в B
Это изображение, которое я получаю от R
Я хочу соединить синие точки на 1, 5 и 10. Если я заменю NA нулями, я получу то же изображение, поскольку мой диапазон Y начинается с 1. И я не хочу, чтобы линия опускалась до нуля и ставила там точку.
Это код, который у меня есть до сих пор:
A<-c(187.674646,101.734756,85.674646,57.327278,51.207435,49.438306,47.939082,44.17294,42.613277,39.916711)
B<-c(27.13350001, NA , NA , NA ,41.5181 , NA , NA , NA , NA ,79.18489934)
plot(A, type="o", pch=16, cex=1.5, lty=1, lwd=0.25, col="red", ylim=graph_range, log="y", axes=FALSE, ann=FALSE)
axis(1, at=1:10, lab=c("1","2","3","4","5","6","7","8","9","10"),cex.axis=0.95, las=1)
yticks <-c(10,100,1000,10000)
axis(2, at=yticks, lab=c("10","100","1000","10000"),cex.axis=0.95)
box()
lines(B, type="o", pch=16, cex=1.5, lty=1, lwd =0.25, col="blue")
Ответ №1:
при построении графика вы всегда можете указать x- и y-координаты ваших точек, поэтому просто удалите NA из B и передайте x-координаты lines(), например:
lines(c(1,5,10),B)
Помогает ли это?
Комментарии:
1. Или что-то вроде
lines(which(!is.na(B)), na.omit(B))
.2. Большое спасибо Доминику и @Axeman, оба метода сработали!
Ответ №2:
Чтобы иметь значения x вместе со значениями B, вы также можете поместить их все в data.frame и удалить строки с помощью NA:
A<-c(187.674646,101.734756,85.674646,57.327278,51.207435,49.438306,47.939082,44.17294,42.613277,39.916711)
B<-c(27.13350001, NA , NA , NA ,41.5181 , NA , NA , NA , NA ,79.18489934)
df_B <- data.frame(x=seq_along(B),
B=B)
df_B_no_na <- na.omit(df_B)
df_B_no_na
#> x B
#> 1 1 27.1335
#> 5 5 41.5181
#> 10 10 79.1849
Затем вы можете просто построить график:
plot(A, type="o", pch=16, cex=1.5, lty=1, lwd=0.25, col="red",
log="y", axes=FALSE, ann=FALSE, ylim=c(10, max(A)))
axis(1, at=1:10, lab=c("1","2","3","4","5","6","7","8","9","10"),cex.axis=0.95, las=1)
yticks <-c(10,100,1000,10000)
axis(2, at=yticks, lab=c("10","100","1000","10000"),cex.axis=0.95)
box()
lines(df_B_no_na, type="o",
pch=16, cex=1.5, lty=1, lwd =0.25, col="blue")
Ответ №3:
Использование gglot2 и company может выглядеть следующим образом.
library(dplyr)
library(ggplot2)
a <- c(187.674646,101.734756,85.674646,57.327278,51.207435,49.438306,47.939082,44.17294,42.613277,39.916711)
b <- c(27.13350001, NA, NA, NA, 41.5181, NA, NA, NA, NA, 79.18489934)
data <- tibble(A = a,
B = b,
C = c(which(!is.na(b)), rep(NA, 7)),
D = c(b[!is.na(b)], rep(NA, 7)))
data %>%
ggplot()
geom_point(aes(x = 1:nrow(data), y = A), color = 'red')
geom_line(aes(x = 1:nrow(data), y = A), color = 'red')
geom_point(aes(x = 1:nrow(data), y = B), color = 'blue')
geom_line(aes(x = C, y = D), color = 'blue')
scale_y_log10()
labs(x = NULL, y = NULL)
theme_minimal()
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_rect(colour = 'black', fill = NA, size = 1))
Что дает нам: