Otrzymuję to ostrzeżenie, gdy próbuję wygenerować fabułę za pomocą ggplot
.
Po pewnym czasie wyszukiwania w Internecie wielu zasugerowało, że moja baza danych zawiera wartości null lub ogólnie brakuje danych, co nie miało miejsca.
W tym pytaniu przyjęta odpowiedź brzmi:
Ostrzeżenie oznacza, że niektóre elementy są usuwane, ponieważ wypadają poza podany zakres
Zastanawiałem się, do czego dokładnie odnosi się ten zakres i jak można ręcznie zwiększyć ten zakres, aby uniknąć wszelkich ostrzeżeń?
y
Oś w tej kwestii jest ograniczona . Ze względu na tę funkcję wartości są ograniczone od 0 do 0,12:ylim(0,0.12)
Odpowiedzi:
Zachowanie, które widzisz, wynika z tego, jak
ggplot2
radzi sobie z danymi, które znajdują się poza zakresami osi wykresu. Możesz zmienić to zachowanie w zależności od tego, czy używaszscale_y_continuous
(lub równoważnieylim
), czycoord_cartesian
też ustawiasz zakresy osi, jak wyjaśniono poniżej.library(ggplot2) # All points are visible in the plot ggplot(mtcars, aes(mpg, hp)) + geom_point()
W poniższym kodzie jeden punkt z hp = 335 jest poza zakresem y wykresu. Ponadto, ponieważ wcześniej
scale_y_continuous
ustawialiśmy zakres osi Y, ten punkt nie jest uwzględniany w żadnych innych statystykach ani miarach sumarycznych obliczanych przez ggplot, takich jak linia regresji liniowej.ggplot(mtcars, aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(0,300)) + # Change this to limits=c(0,335) and the warning disappars geom_smooth(method="lm") Warning messages: 1: Removed 1 rows containing missing values (stat_smooth). 2: Removed 1 rows containing missing values (geom_point).
W poniższym kodzie punkt z hp = 335 nadal znajduje się poza zakresem y wykresu, ale mimo to ten punkt jest uwzględniany we wszelkich statystykach lub miarach sumarycznych obliczanych przez ggplot, takich jak linia regresji liniowej. Dzieje się tak, ponieważ wcześniej
coord_cartesian
ustawialiśmy zakres osi Y, a ta funkcja nie wyklucza punktów, które znajdują się poza zakresami wykresu, gdy wykonuje inne obliczenia na danych.Jeśli porównasz ten i poprzedni wykres, zobaczysz, że linia regresji liniowej na drugim wykresie ma nieco bardziej strome nachylenie, ponieważ punkt o hp = 335 jest uwzględniany podczas obliczania linii regresji, mimo że nie jest widoczny na wykresie .
ggplot(mtcars, aes(mpg, hp)) + geom_point() + coord_cartesian(ylim=c(0,300)) + geom_smooth(method="lm")
źródło
Tylko dla potrząśnięcia uzupełniającego odpowiedź udzieloną przez eipi10.
Miałem ten sam problem, bez użycia
scale_y_continuous
norcoord_cartesian
.Konflikt pochodził z osi X, na której zdefiniowałem
limits = c(1, 30)
. Wygląda na to, że takie limity nie zapewniają wystarczającej ilości miejsca, jeśli chcesz „omijać” paski, więc R nadal generuje błądDostosowanie granic osi x do
limits = c(0, 31)
rozwiązania problemu.Podsumowując, nawet jeśli nie stawiasz granic swojej osi y, sprawdź zachowanie osi X, aby upewnić się, że masz wystarczająco dużo miejsca
źródło
Nawet jeśli dane mieszczą się w określonych granicach (np.
c(0, 335)
), Dodaniegeom_jitter()
instrukcji może przesunąć niektóre punkty poza te granice, powodując ten sam komunikat o błędzie.library(ggplot2) range(mtcars$hp) #> [1] 52 335 # No jitter -- no error message ggplot(mtcars, aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(0,335)) # Jitter is too large -- this generates the error message ggplot(mtcars, aes(mpg, hp)) + geom_point() + geom_jitter(position = position_jitter(w = 0.2, h = 0.2)) + scale_y_continuous(limits=c(0,335)) #> Warning: Removed 1 rows containing missing values (geom_point).
Utworzony 2020-08-24 przez pakiet reprex (v0.3.0)
źródło
Wpadłem na to również, ale w przypadku, gdy chciałem uniknąć dodatkowych komunikatów o błędach, zachowując podany zakres. Opcją jest również podzbiór danych przed ustawieniem zakresu, aby zakres mógł być zachowany w dowolny sposób bez wyzwalania ostrzeżeń.
library(ggplot2) range(mtcars$hp) #> [1] 52 335 # Setting limits with scale_y_continous (or ylim) and subsetting accordingly ## avoid warning messages about removing data ggplot(data= subset(mtcars, hp<=300 & hp >= 100), aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(100,300))
źródło