Несоответствие цветов с использованием rgl

Я использую rgl для создания диаграммы рассеяния точек из импортированного набора данных .csv. Цвета, которые я хотел бы получить для точек, задаются в наборе данных. Все работает нормально, за исключением того, что при отображении диаграммы рассеяния цвета точек не соответствуют цветам, определенным в данных. Например, все точки, обозначенные как «синие», на самом деле могут быть зелеными, а все точки, обозначенные как «желтые», могут быть красными.

data=read.csv("ExpLayout.csv", header = TRUE)
x=data$x
y=data$y
z=data$z
color=data$color
plot3d(x=x, y=y, z=z, type="s", col=color)

r rgl
person joeshmoe5409    schedule 12.03.2013    source источник
comment
Попробуйте прочитать свои данные с помощью read.csv(filename, header=TRUE, stringsAsFactors=FALSE), а затем сообщите об этом.   -  person Marius    schedule 13.03.2013
comment
И если предложение Мариуса не сработает, попробуйте вставить некоторые из ваших данных через dput( head( data ) )   -  person Simon O'Hanlon    schedule 13.03.2013
comment
@ user2163189: Вы можете увидеть, что названия цветов выглядят как "red", но это не значит, что color на самом деле является вектором character, а не factor.   -  person Marius    schedule 13.03.2013


Ответы (1)


Это почти наверняка связано с read.csv преобразованием строк в факторы

Посмотрите разницу в этом воспроизводимом примере

library(rgl)
x<-1:5
y=1:5
z <- 1:5
colors <- c('red','green','blue','orange','purple')
plot3d(x=x,y=y,z=z,col=colors, type = 's')
colorsf <- factor(c('red','green','blue','orange','purple'))
plot3d(x=x,y=y,z=z,col=colorsf, type = 's')

Итак, либо прочтите color как символьный столбец с помощью stringsAsFactors=FALSE, либо приведите к символу с помощью as.character() или levels(colors)[colors]

person mnel    schedule 12.03.2013
comment
Вот и получилось! Я поместил цвета в набор данных в предположении, что их можно рассматривать как строки, но, видимо, это не совсем так. Спасибо, mnel и @Marius! - person joeshmoe5409; 13.03.2013
comment
это было очень полезно, спасибо. Я уже некоторое время использую R, и до сих пор меня не устраивают подобные вещи. - person zach; 06.08.2013