2013-02-23 1 views
6

Mam następujący działcepunkty łączące

require(ggplot2) 

dtf <- structure(list(Variance = c(5.213, 1.377, 0.858, 0.613, 0.412, 0.229, 0.139, 0.094, 0.064), Component = structure(1:9, .Label = c("PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9"), class = "factor")), .Names = c("Variance", "Component"), row.names = c(NA, -9L), class = "data.frame") 

ggplot(dtf, aes(x = Component, y = Variance)) + 
geom_point() 

enter image description here

chciałbym po prostu, aby połączyć kropki z linii prostych. Próbowałem +geom_line() ale który wygenerował błąd

Odpowiedz

18

swoje wartości x są dyskretne (czynnik) oraz geom_line() każda unikalna wartość x postrzegać jako oddzielnej grupy i próbuje połączyć punkty tylko wewnątrz tej grupy. Ustawienie group=1 w aes() zapewnia, że ​​wszystkie wartości są traktowane jako jedna grupa.

ggplot(dtf, aes(x = Component, y = Variance,group=1)) + 
    geom_point()+geom_line() 
+1

(+1) prawdopodobnie powinieneś wyjaśnić, dlaczego tak się stało. – Arun

+0

+1 miłe, dzięki. Zabrałoby mi to całe wieki! –

+2

Jeśli używasz dodatkowej estetyki do porównywania danych z różnych warunków na tych samych osiach z czymś takim, jak 'x = Przepustnica, y = Przyspieszenie, kolor = Widżet', możesz dodać' group = Widget', aby narysować linie łączące punkty z te same widżety. –

0

Byłoby to wykreślić punkty z X jako wartości całkowitej z kategorii czynników:

ggplot(dtf, aes(x = as.numeric(Component), y = Variance)) + 
     geom_point() + geom_line() 

można umieścić z powrotem w etykietach z kategorii:

ggplot(dtf, aes(x = as.numeric(Component), y = Variance)) + 
    geom_point() +geom_line() + scale_x_discrete(labels=dtf$Component) 
+0

Dzięki. Głównym problemem jest to, że wymaga to również zmiany etykiety osi X, aby uniknąć stwierdzenia "as.numeric (Component)" –

+0

Zgadzam się. Z pewnością nie był optymalny. Wymaga 2 poprawek i jak dotąd zastosowałem tylko jeden. Powinieneś zaakceptować drugą odpowiedź. –