2013-03-12 2 views
1

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

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) 
+2

Попробуйте прочитать в своем данные с 'read.csv (filename, header = TRUE, stringsAsFactors = FALSE)', а затем отчитываются. – Marius

+0

И если предложение Мариуса не работает, попробуйте вставить некоторые ваши данные через 'dput (head (data))' –

+0

@ user2163189: Вы можете видеть, что имена цветов отображаются как '" red "', но это не так означает, что 'color' на самом деле является символом' character', а не 'factor'. – Marius

ответ

4

Это почти наверняка связано с 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]

+0

Это было! Я поместил цвета в набор данных внутри "" в предположении, что это позволит им восприниматься как строки, но, по-видимому, это не совсем сокращает его. Спасибо, мнел и @ Мариус! – joeshmoe5409

+0

Это было очень полезно, спасибо. Я уже некоторое время использую R, и я все еще спотыкаюсь на такие вещи. – zach

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