jitter geom_line ()

Există o modalitate de a bruia liniile în geom_line() ? Știu că se sfidează foarte bine scopul acestui complot, dar dacă aveți un complot cu câteva rânduri și doriți ca toți să arate că ar putea fi la îndemână. Poate altă soluție la această problemă visibilitate .

Please see below for code, jitter geom_line

A  <- c(1,2,3,5,1)
B  <- c(3,4,1,2,3)
id <- 1:5
df <- data.frame(id, A, B)


# install.packages(reshape2)
require(reshape2) # for melt
dfm <- melt(df, id=c("id"))

# install.packages(ggplot2)
require(ggplot2)
p1 <- ggplot(data = dfm, aes(x = variable, y = value, group = id, 
color= as.factor(id))) + geom_line() + labs(x = "id # 1 is hardly 
visible as it is covered by id # 5") + scale_colour_manual(values = 
c('red','blue', 'green', 'yellow', 'black')) 


p2 <- ggplot(subset(dfm, id != 5), aes(x = variable, y = value, 
group = id, color= as.factor(id))) + geom_line() + labs(x = "id # 
5 removed, id # 1 is visible") + scale_colour_manual(values = 
c('red','blue', 'green', 'yellow', 'black')) 

# install.packages(RODBC)
require(gridExtra)

grid.arrange(p1, p2)
0

3 răspunsuri

Tind sa folosesc diferite stiluri de liniste, asa ca, sa zicem, o linie solida albastra "trece prin" printr-o linie rosie distrusa deasupra ei. Apoi, din nou, depinde de ceea ce doriți să împărtășiți cititorului. Rețineți în primul rând că datele ar trebui să fie puncte și linii teoretice cu excepția cazului în care acest lucru face lucrurile aglomerate. Cu excepția cazului în care valorile y și x sunt identice, va fi mai ușor să vedeți punctele. (sau ați putea aplica funcția jitter existentă la valorile x)  În continuare, dacă doriți doar să arătați care sunt rulajele din "pachet" și care sunt valori exagerate, suprapunerea nu contează, deoarece este foarte puțin probabil ca două valori extreme să fie aproape egale.

Dacă doriți să arătați o mulțime de runde aproape egale, puteți prefera (adică cititorii dvs. să înțeleagă mai bine) să traseze deltele în raport cu valori medii, mai degrabă decât cu valori reale.

0
adăugat
Îmi place argumentul tău, dar nu sunt sigur ce să aplice în cazul meu. Ar putea fi posibil să furnizați un exemplu de cod sau link-uri către unele exemple vizuale?
adăugat autor Eric Fail, sursa
@EricFail: cel mai simplu mod de a aplica bruiajul atunci când plotați punctele este doar y_jit <-jitter (y_data) și/sau același pentru x_data </​​code> cod. Dacă vreți să "mișcați" linii, aș merge cu soluția lui baptiste.
adăugat autor Carl Witthoft, sursa

Poti incerca

geom_line(position=position_jitter(w=0.02, h=0))

și vezi dacă funcționează bine.

0
adăugat
Îmi place această soluție, o voi încerca mâine pe datele mele reale (când mă întorc la laborator). Ați încercat-o cu codul meu?
adăugat autor Eric Fail, sursa
@ bun, punct bun.
adăugat autor Eric Fail, sursa
da, dar dacă preferați jitterul vertical sau orizontal va depinde de datele dvs., cred. De asemenea, s-ar putea să nu fie o idee bună să jitter totul dacă doriți doar o linie jignită.
adăugat autor baptiste, sursa
ia în considerare și position_dodge() pentru a evita suprapunerea - a se vedea răspunsul meu de mai jos
adăugat autor flexponsive, sursa

Dacă doriți doar să împiedicați exact două suprapuneri de linii, acum există o modalitate mai bună: position_dodge() , care "reglează poziția prin evitarea suprapunerilor în lateral". Acest lucru este mai frumos decât adăugarea jitter la orice linie, chiar și atunci când nu este necesar.

Evitați ca liniile ggplot2 să se suprapună exact folosind funcția position_dodge ()

Exemplu de cod:

df<-data.frame(x=1:10,y=1:10,z=1:10);
df.m <- melt(df, id.vars = "x");
ggplot(df.m, aes(x=x,y=value,group=variable,colour=variable)) 
    + geom_line(position=position_dodge(width=0.2));

Datorită codului position_dodge() , acum putem vedea că există două linii în plot, care se întâmplă să coincidă exact:

prevenirea suprapunerii liniei ggplot cu position_doge

0
adăugat
Acest lucru ar fi fost ceea ce am nevoie, dar din anumite motive a fost nerfed între timp. Acum, position_dodge are un parametru width fără height (versiunea 2.2.1). -postul de spaghetti pentru tratarea posturilor :( Tineti +1 pentru tine, deoarece pare a fi cel mai apropiat de raspunsul de care am nevoie.
adăugat autor rumtscho, sursa
@rumtscho mulțumiri pentru comentariu. Pentru oricine altcineva care a citit acest lucru, am confirmat că exemplul de bază de mai sus (pentru parcelele de linii) funcționează în continuare așa cum se întâmplă cu ggplot 2.2.1
adăugat autor flexponsive, sursa