2013-02-23 4 views
6

У меня есть следующий сюжетсоединительные точки

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

Я просто хотел бы соединить точки прямыми линиями. Я попытался +geom_line() но сгенерирован ошибке

ответ

18

Ваших x значений являются дискретным (фактором) и geom_line() каждое уникальный x значения воспринимает как отдельная группа и пытается соединить точки только внутри этой группы. Установка group=1 в aes() гарантирует, что все значения рассматриваются как одна группа.

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

(+1) вероятно, вы должны объяснить, почему это произошло. – Arun

+0

+1 хороший, спасибо. Мне потребовалось бы много времени, чтобы это исправить! –

+2

Если вы используете дополнительную эстетику для сравнения данных из разных условий на тех же осях с чем-то вроде 'x = Throttle, y = Acceleration, color = Widget', вы можете добавить' group = Widget', чтобы нарисовать линии, соединяющие точки с те же виджеты. –

0

Это сюжет точки с й в качестве целочисленных значений категорий факторов:

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

Вы можете поместить обратно в категории наклейках с:

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

Спасибо. Основная проблема заключается в том, что для этого также требуется изменить метку оси x, чтобы она не говорила «as.numeric (Component)» –

+0

Согласен. Это, конечно, не оптимально. Требуется 2 исправления, и я до сих пор их применял только один. Вы должны принять другой ответ. –

Смежные вопросы