2016-09-16 13 views
7

ggplot2 satırında iki satırlık kayda değer çakışmaya sahip bir satır var. position_jitterdodge()'u daha görünür hale getirmeye çalışıyorum, ancak çizgiler ve noktaları her ikisine de aynı şekilde alamıyorum. Noktaları ve çizgiyi sadece yatay olarak çizmeye çalışıyorum (y ekseninde herhangi bir değişiklik önermek istemediğimden).R: ggplot2 satırında hem geom_line hem de geom_point ile jitter nasıl yazılır?

## Create data frames 
dimension <- factor(c("A", "B", "C", "D")) 
df <- data.frame("dimension" = rep(dimension, 2), 
       "value" = c(20, 21, 34, 32, 
          20, 21, 36, 29), 
       "Time" = c(rep("First", 4), rep("Second", 4))) 
## Plot it 
ggplot(data = df, aes(x = dimension, y = value, 
         shape = Time, linetype = Time, group = Time)) + 
    geom_line(position = position_jitterdodge(dodge.width = 0.45)) + 
    geom_point(position = position_jitterdodge(dodge.width = 0.45)) + 
    xlab("Dimension") + ylab("Value") 

çirkin üretir Hangi: İşte bir MWE olan

Line/point mismatch

Açıkçası burada temelden yanlış bir şey var: Ben geom_point seğirme geom_line titremeleri izlemesini sağlamak için ne yapmalıyım?

cevap

11

Yalnızca yatay için başka bir seçenek, position_dodge belirtmek ve bunu her bir geom için position bağımsız değişkenine iletmektir.

pd <- position_dodge(0.4) 

ggplot(data = df, aes(x = dimension, y = value, 
         shape = Time, linetype = Time, group = Time)) + 
    geom_line(position = pd) + 
    geom_point(position = pd) + 
    xlab("Dimension") + ylab("Value") 

enter image description here

+0

Güzel, bu da çalışıyor ve çok kolay. – drgibbon

+1

John'un çözümünü kesinlikle en uygun yanıtı @ drgibbon olarak işaretlerdim. – hrbrmstr

+0

Teşekkürler - nedenini merak ediyorum? İkisi de aynı şeyi başarmış gibi görünüyor. Ggplot'un bana olan hayranlıklarından biri de, görünüşte aynı şeyi gerçekleştirmenin kaç yolu olduğu. Bu sadece bildiğim şekilde oldu ... – JohnSG

7

bir çözüm noktalarını elle titreme şudur:

df$value_j <- jitter(df$value) 

ggplot(df, aes(dimension, value_j, shape=Time, linetype=Time, group=Time)) + 
    geom_line() + 
    geom_point() + 
    labs(x="Dimension", y="Value") 

enter image description here

sizin ayrık X ekseni için yatay çözeltisi (temiz olarak temiz değil under the covers işlediği beri ggplot2 bunu yaptığında eksen ve nokta oldukça güzel sizin için dönüşümler) ama bu mümkün:

df$dim_j <- jitter(as.numeric(factor(df$dimension))) 

ggplot(df, aes(dim_j, value, shape=Time, linetype=Time, group=Time)) + 
    geom_line() + 
    geom_point() + 
    scale_x_continuous(labels=dimension) + 
    labs(x="Dimension", y="Value") 

enter image description here

+0

sayesinde, çok hızlıydı. Sadece soruyu, yatay jitter almaya çalışıyorum diye güncelledim, bu mümkün mü? – drgibbon

+1

@drgibbon, jitter'i y değerini (value_j) değil x değerini (boyut) eklersiniz. Veya geom_jitter kullanarak yatay jitter yapmak için yükseklik = 0 'ayarlayabilirsiniz. – C8H10N4O2

+0

Yatay çözüm eklendi ama X ekseni artık gerçekten ayrık olduğu için biraz hokey var (cevap durumları gibi, ggplot2 bu sizin için kapakları altında). – hrbrmstr

İlgili konular