ggparcoord: цвет по дискретной шкале

Я не могу получить мой ggparcoord построение графика с использованием дискретной шкалы. Когда я делаю это:

ggparcoord(data = iris, columns = 1:4, groupColumn = "Species")

выходной график все еще окрашивает линии, используя непрерывную шкалу (используя уровни Species фактор).

Я также попробовал модифицированную версию scale_color_manual Трюк, указанный здесь: контроль цвета в ggparcoord, безрезультатно.

ggparcoord(data = iris, columns = 1:4, groupColumn = "Species") + 
    scale_color_manual(values = c("setosa" = "red", 
                                  "versicolor" = "green", 
                                  "virginica" = "blue"))

Но я получаю это сообщение об ошибке: Error: Continuous value supplied to discrete scale,

Я также пытался .. + scale_color_discrete(): то же сообщение об ошибке.

Я в тупике... даже примеры на странице крана ggparcorod не работают:

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1],100),]
ggparcoord(data = diamonds.samp,columns = c(1,5:10),groupColumn = 2)

Сообщение об ошибке: Error: (list) object cannot be coerced to type 'double'

редактировать

Существует решение для этого, которое заключается в использовании mapping=aes(color=as.factor(Species)), как показано в Didzis Elferts ниже. Но, это требует добавления дополнительных настроек в scale_color_discrete

ggparcoord(data = iris, columns = 1:4, mapping=aes(color=as.factor(Species))) +
        scale_color_discrete("Species", labels=levels(iris$Species) )

Есть ли способ сделать то же самое, не добавляя scale_color_discrete("Species", labels=levels(iris$Species) ) часть?

Например, в ggplot2,

ggplot(data=iris, aes(x=Sepal.Width,y=Sepal.Length,color=Species)) + geom_point()

автоматически генерирует красиво помеченные легенды. Есть ли аналогичный метод в ggparcoord?

Я использую R версии 3.2.1, ggplot2_2.0.0, а также GGally_1.0.0

sessionInfo()
# R version 3.2.1 (2015-06-18)
# Platform: x86_64-apple-darwin13.4.0 (64-bit)
# Running under: OS X 10.10.5 (Yosemite)
# 
# locale:
# [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
# 
# attached base packages:
# [1] stats     graphics  grDevices utils     datasets  methods   base     
# 
# other attached packages:
# [1] ggplot2_2.0.0 GGally_1.0.0  magrittr_1.5  dplyr_0.4.3  

Любая помощь приветствуется!

1 ответ

Решение

Одним из решений является использование аргумента mapping= и установите его as.factor(Species) (без as.factor() это дает тот же результат, что и в вопросе). Затем с scale_color_discrete() ты можешь получить Species имена как ярлыки.

ggparcoord(data = iris, columns = 1:4, mapping=aes(color=as.factor(Species)))+
  scale_color_discrete("Species",labels=levels(iris$Species))

Другие вопросы по тегам