Karthik Kota
2011-Jun-09 14:51 UTC
[R] scatterplot3d - help assign colors based on multiple conditions
Hi I am relatively new to R and am trying to figure out to plot 3d scatter plot using defined colors based on x-axis and y-axis values. Right now in the code below, I assign colors based on certain values in the names of the x-axis. Now if I want to extend the condition to assign a color based on the names of both x-axis and y-axis values, what should I be doing? Any help or ideas would be greatly appreciated. For e.g. in my 3 column matrix below, if I want to assign "red" to all the values whose first column and second column contain "Anterior_nares" and assign black to any other combination. Thanks! Karthik library(scatterplot3d) chd1=read.table(file="test.out", header=F, sep="\t") col=as.vector(chd1[,1]) xlabels=as.vector(chd1[,1]) ylabels=as.vector(chd1[,2]) mycols<-c("red","blue","green","chocolate","orange", "brown") col[grep("_Stool", xlabels) ]<-mycols[1] #col[grep("_Stool", xlabels) && grep("_Stool", ylabels) ]<-mycols[1] col[grep("_Tongue_dorsum", xlabels) ]<-mycols[2] col[grep("_Posterior_fornix", xlabels) ]<-mycols[3] col[grep("_Anterior_nares", xlabels) ]<-mycols[4] col[grep("_Buccal_mucosa", xlabels) ]<-mycols[5] col[grep("_Supragingival_plaque", xlabels) ]<-mycols[6] png(file="3dplot_test.png", w=700,h=700) scatterplot3d(chd1[, 1], chd1[, 2], chd1[, 3], main="test", xlab="sample", ylab="sample", zlab="kmers", color=col,type="p") dev.off () my test.out matrix looks something like this: A011132_Anterior_nares A011263_Anterior_nares 50130 A011132_Anterior_nares A011397_Stool 34748 A011132_Anterior_nares A012291_Tongue 40859 A011132_Anterior_nares A012663_Buccal_mucosa 76213 A011132_Anterior_nares A013155_Anterior_nares 36841 A011132_Anterior_nares A013269_Anterior_nares 45619 A011132_Anterior_nares A013637_Anterior_nares 56995 [[alternative HTML version deleted]]
Uwe Ligges
2011-Jun-09 18:56 UTC
[R] scatterplot3d - help assign colors based on multiple conditions
On 09.06.2011 16:51, Karthik Kota wrote:> Hi > > I am relatively new to R and am trying to figure out to plot 3d scatter plot using defined colors based on x-axis and y-axis values. Right now in the code below, I assign colors based on certain values in the names of the x-axis. Now if I want to extend the condition to assign a color based on the names of both x-axis and y-axis values, what should I be doing? Any help or ideas would be greatly appreciated. > > For e.g. in my 3 column matrix below, if I want to assign "red" to all the values whose first column and second column contain "Anterior_nares" and assign black to any other combination.Both question and answer are not really scatterplot3d related: You probably want col <- ifelse(grepl("_Anterior_nares", xlabels) & grepl("_Anterior_nares", ylabels), "red", "black") Best, Uwe Ligges> Thanks! > Karthik > > library(scatterplot3d) > > chd1=read.table(file="test.out", header=F, sep="\t") > col=as.vector(chd1[,1]) > xlabels=as.vector(chd1[,1]) > ylabels=as.vector(chd1[,2]) > > mycols<-c("red","blue","green","chocolate","orange", "brown") > col[grep("_Stool", xlabels) ]<-mycols[1] > #col[grep("_Stool", xlabels)&& grep("_Stool", ylabels) ]<-mycols[1] > col[grep("_Tongue_dorsum", xlabels) ]<-mycols[2] > col[grep("_Posterior_fornix", xlabels) ]<-mycols[3] > col[grep("_Anterior_nares", xlabels) ]<-mycols[4] > col[grep("_Buccal_mucosa", xlabels) ]<-mycols[5] > col[grep("_Supragingival_plaque", xlabels) ]<-mycols[6] > > > png(file="3dplot_test.png", w=700,h=700) > > scatterplot3d(chd1[, 1], chd1[, 2], chd1[, 3], main="test", xlab="sample", ylab="sample", zlab="kmers", color=col,type="p") > dev.off () > > > my test.out matrix looks something like this: > > A011132_Anterior_nares A011263_Anterior_nares 50130 > A011132_Anterior_nares A011397_Stool 34748 > A011132_Anterior_nares A012291_Tongue 40859 > A011132_Anterior_nares A012663_Buccal_mucosa 76213 > A011132_Anterior_nares A013155_Anterior_nares 36841 > A011132_Anterior_nares A013269_Anterior_nares 45619 > A011132_Anterior_nares A013637_Anterior_nares 56995 > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Karthik Kota
2011-Jun-10 18:48 UTC
[R] scatterplot3d - help assign colors based on multiple conditions
Thanks! That did the trick. On Jun 10, 2011, at 3:16 AM, Jim Lemon wrote:> On 06/10/2011 06:40 AM, Karthik Kota wrote: >> Thanks a lot! This is very helpful. >> >> If I have to extend this to one more condition say assign "blue" if both the corresponding labels have "_Tongue_dorsum", is there a straight forward function. Doing something like below is overriding the colors assigned by the first statement. >> >> col<- ifelse(grepl("_Anterior_nares", xlabels)& grepl("_Anterior_nares", ylabels), "red", "black") >> col<- ifelse(grepl("_Tongue_dorsum", xlabels)& grepl("_Tongue_dorsum", ylabels), "blue", "black") >> > Hi Karthik, > Your problem is that you are assigning all of the values to "col" twice. If you reverse the order of the statements you will get the red/black color set. Try this: > > col<-rep("black",dim(cdh1)[1]) > col[grepl("_Anterior_nares", xlabels) & > grepl("_Anterior_nares", ylabels)]<-"red" > col[grepl("_Tongue_dorsum", xlabels) & > grepl("_Tongue_dorsum", ylabels)]<-"blue" > > If your two conditions specify disjunct sets, that is, no case satisfies both conditions, you should have the correct vector of colors. > > Jim