Dear fellow R users, I would like to draw a "sunflowerplot" because I have data (decade by month) that plots multiple times on the same x-y co-ordinates. Further I would like to colour each of the points/sunflower leaves on the plot according to the group they belong to (i.e. which type of event each represents within that decade and month). I thought that this would be relatively straight forward - I have a series of x and y co-ords and a colour associated with each and I just use the column with the colours in it to colour-code the points using col = column.name when calling the plot. However, the sunflower plot uses the function "xy.coords" to calculate the number of times that multiple points are plotted at the same coordinates and in so doing creates a new dataset (x.coords, y.coords and the number of times each is repeated) and this dataset no longer has the colours associated with the individual points. The colours in a resultant plot merely plot in the original order. I would like to know whether there is a way of associating the correct colours with individual points that are now represented by the xy.coords output. If you are interested in this example, an example of the code that I have been using and the input data used can be found at the end of this message. Many thanks in advance for your input! Best wishes, Nicola Code: For sunflowerplot par(las = 1) sunflowerplot(extremes.decade$Decade, extremes.decade$Month, col extremes.decade$Extreme, cex = 1.2, xlab = "Decade", ylab = "Month", axes = F , pch = 16, seg.col = extremes.decade$Extreme, size = 0.2, seg.lwd =2) axis(side = 1, at = c(6:11), labels c("","1960s","1970s","1980s","1990s","2000s"), tick = TRUE, line = NA) axis(side = 2, at = c(0:12), labels c("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov"," Dec"), tick = TRUE, line = NA) legend(7, 12.5, legend = c("Grp1"," Grp2"," Grp3"," Grp4"," Grp5"," Grp6"," Grp7"," Grp8"), col c("blue","brown","orange","green","red","lightblue","purple","pink"), pch = 19, bty = "n") For comparison of where colours should lie - normal plot: #add random number to make all points different so that they dont overplot a <- runif(109,1,1.001) extremes.decade$Year.a <- a*extremes.decade$Year plot(extremes.decade$Year.a, extremes.decade$Month, col extremes.decade$Extreme, cex = 1.2, xlab = "Decade", ylab = "Month", yaxt ="n" , pch = 16) #axis(side = 1, at = c(6:11), labels c("","1960s","1970s","1980s","1990s","2000s"), tick = TRUE, line = NA) axis(side = 2, at = c(0:12), labels c("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov"," Dec"), tick = TRUE, line = NA) legend(1950, 12.5, legend = c("Grp1"," Grp2"," Grp3"," Grp4"," Grp5"," Grp6"," Grp7"," Grp8"), col c("blue","brown","orange","green","red","lightblue","purple","pink"), pch = 19, bty = "n") Data: Decade Year Month Extreme 7 1968 1 brown 7 1966 2 green 7 1966 2 lightblue 7 1968 2 green 7 1963 3 lightblue 7 1966 4 green 7 1961 5 lightblue 7 1967 5 blue 7 1964 6 blue 7 1965 6 green 7 1968 6 blue 7 1968 6 lightblue 7 1965 7 orange 7 1963 9 red 7 1964 9 lightblue 7 1968 9 blue 7 1961 10 green 7 1966 10 brown 7 1965 12 green 8 1973 1 brown 8 1976 1 red 8 1977 1 brown 8 1977 2 blue 8 1977 2 orange 8 1974 3 blue 8 1970 4 brown 8 1974 4 brown 8 1975 4 brown 8 1975 5 green 8 1973 6 red 8 1979 7 blue 8 1979 8 blue 8 1974 9 lightblue 8 1979 9 green 8 1974 10 brown 8 1975 10 green 8 1976 10 blue 8 1976 11 green 8 1970 12 lightblue 8 1975 12 lightblue 9 1980 1 pink 9 1982 1 pink 9 1980 2 pink 9 1986 2 pink 9 1981 3 green 9 1982 5 green 9 1987 5 red 9 1985 6 pink 9 1980 7 red 9 1983 7 blue 9 1980 8 pink 9 1981 8 lightblue 9 1985 8 red 9 1981 9 green 9 1982 9 pink 9 1985 10 orange 9 1987 10 brown 9 1983 11 pink 10 1990 1 red 10 1999 1 brown 10 1997 2 brown 10 1999 2 brown 10 1999 3 orange 10 1991 4 brown 10 1991 4 red 10 1997 4 lightblue 10 1997 6 blue 10 1997 6 lightblue 10 1994 7 green 10 1996 7 lightblue 10 1999 7 orange 10 1993 9 blue 10 1994 10 pink 10 1997 10 red 10 1994 11 brown 10 1996 11 blue 10 1996 11 lightblue 10 1993 12 blue 10 1997 12 purple 11 2004 1 orange 11 2001 2 brown 11 2006 2 orange 11 2006 2 red 11 2000 3 lightblue 11 2000 3 orange 11 2002 3 red 11 2004 3 purple 11 2003 4 orange 11 2004 4 purple 11 2001 5 purple 11 2003 5 purple 11 2002 7 purple 11 2005 7 red 11 2002 8 blue 11 2002 8 orange 11 2002 8 purple 11 2006 8 blue 11 2001 10 orange 11 2002 10 brown 11 2002 10 purple 11 2005 10 red 11 2002 11 purple 11 2004 11 orange 11 2004 11 red 11 2002 12 orange 11 2004 12 orange -------------------------------------------------------------------------------- This e-mail communication and any attachments are confidential and are intended only for the individual(s) or entity named above and others who have been specifically authorized to receive it. If you are not the intended recipient, please do not copy, use or disclose the contents of this communication to others. Please notify the sender that you have received this email in error by replying to the e-mail or by telephoning the sender. Please then delete the e-mail and any copies of it. This information may contain private, confidential or privileged material. Thank you. -------------------------------------------------------------------------------- [[alternative HTML version deleted]]
Dear fellow R users, I would like to draw a "sunflowerplot" because I have data (decade by month) that plots multiple times on the same x-y co-ordinates. Further I would like to colour each of the points/sunflower leaves on the plot according to the group they belong to (i.e. which type of event each represents within that decade and month). I thought that this would be relatively straight forward - I have a series of x and y co-ords and a colour associated with each and I just use the column with the colours in it to colour-code the points using col = column.name when calling the plot. However, the sunflower plot uses the function "xy.coords" to calculate the number of times that multiple points are plotted at the same coordinates and in so doing creates a new dataset (x.coords, y.coords and the number of times each is repeated) and this dataset no longer has the colours associated with the individual points. The colours in a resultant plot merely plot in the original order. I would like to know whether there is a way of associating the correct colours with individual points that are now represented by the xy.coords output. If you are interested in this example, an example of the code that I have been using and the input data used can be found at the end of this message. Many thanks in advance for your input! Best wishes, Nicola Code: For sunflowerplot par(las = 1) sunflowerplot(extremes.decade$Decade, extremes.decade$Month, col extremes.decade$Extreme, cex = 1.2, xlab = "Decade", ylab = "Month", axes = F , pch = 16, seg.col = extremes.decade$Extreme, size = 0.2, seg.lwd =2) axis(side = 1, at = c(6:11), labels c("","1960s","1970s","1980s","1990s","2000s"), tick = TRUE, line = NA) axis(side = 2, at = c(0:12), labels c("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov"," Dec"), tick = TRUE, line = NA) legend(7, 12.5, legend = c("Grp1"," Grp2"," Grp3"," Grp4"," Grp5"," Grp6"," Grp7"," Grp8"), col c("blue","brown","orange","green","red","lightblue","purple","pink"), pch = 19, bty = "n") For comparison of where colours should lie - normal plot: #add random number to make all points different so that they dont overplot a <- runif(109,1,1.001) extremes.decade$Year.a <- a*extremes.decade$Year plot(extremes.decade$Year.a, extremes.decade$Month, col extremes.decade$Extreme, cex = 1.2, xlab = "Decade", ylab = "Month", yaxt ="n" , pch = 16) #axis(side = 1, at = c(6:11), labels c("","1960s","1970s","1980s","1990s","2000s"), tick = TRUE, line = NA) axis(side = 2, at = c(0:12), labels c("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov"," Dec"), tick = TRUE, line = NA) legend(1950, 12.5, legend = c("Grp1"," Grp2"," Grp3"," Grp4"," Grp5"," Grp6"," Grp7"," Grp8"), col c("blue","brown","orange","green","red","lightblue","purple","pink"), pch = 19, bty = "n") Data: Decade Year Month Extreme 7 1968 1 brown 7 1966 2 green 7 1966 2 lightblue 7 1968 2 green 7 1963 3 lightblue 7 1966 4 green 7 1961 5 lightblue 7 1967 5 blue 7 1964 6 blue 7 1965 6 green 7 1968 6 blue 7 1968 6 lightblue 7 1965 7 orange 7 1963 9 red 7 1964 9 lightblue 7 1968 9 blue 7 1961 10 green 7 1966 10 brown 7 1965 12 green 8 1973 1 brown 8 1976 1 red 8 1977 1 brown 8 1977 2 blue 8 1977 2 orange 8 1974 3 blue 8 1970 4 brown 8 1974 4 brown 8 1975 4 brown 8 1975 5 green 8 1973 6 red 8 1979 7 blue 8 1979 8 blue 8 1974 9 lightblue 8 1979 9 green 8 1974 10 brown 8 1975 10 green 8 1976 10 blue 8 1976 11 green 8 1970 12 lightblue 8 1975 12 lightblue 9 1980 1 pink 9 1982 1 pink 9 1980 2 pink 9 1986 2 pink 9 1981 3 green 9 1982 5 green 9 1987 5 red 9 1985 6 pink 9 1980 7 red 9 1983 7 blue 9 1980 8 pink 9 1981 8 lightblue 9 1985 8 red 9 1981 9 green 9 1982 9 pink 9 1985 10 orange 9 1987 10 brown 9 1983 11 pink 10 1990 1 red 10 1999 1 brown 10 1997 2 brown 10 1999 2 brown 10 1999 3 orange 10 1991 4 brown 10 1991 4 red 10 1997 4 lightblue 10 1997 6 blue 10 1997 6 lightblue 10 1994 7 green 10 1996 7 lightblue 10 1999 7 orange 10 1993 9 blue 10 1994 10 pink 10 1997 10 red 10 1994 11 brown 10 1996 11 blue 10 1996 11 lightblue 10 1993 12 blue 10 1997 12 purple 11 2004 1 orange 11 2001 2 brown 11 2006 2 orange 11 2006 2 red 11 2000 3 lightblue 11 2000 3 orange 11 2002 3 red 11 2004 3 purple 11 2003 4 orange 11 2004 4 purple 11 2001 5 purple 11 2003 5 purple 11 2002 7 purple 11 2005 7 red 11 2002 8 blue 11 2002 8 orange 11 2002 8 purple 11 2006 8 blue 11 2001 10 orange 11 2002 10 brown 11 2002 10 purple 11 2005 10 red 11 2002 11 purple 11 2004 11 orange 11 2004 11 red 11 2002 12 orange 11 2004 12 orange -------------------------------------------------------------------------------- This e-mail communication and any attachments are confidential and are intended only for the individual(s) or entity named above and others who have been specifically authorized to receive it. If you are not the intended recipient, please do not copy, use or disclose the contents of this communication to others. Please notify the sender that you have received this email in error by replying to the e-mail or by telephoning the sender. Please then delete the e-mail and any copies of it. This information may contain private, confidential or privileged material. Thank you. -------------------------------------------------------------------------------- [[alternative HTML version deleted]]
On 12/12/2011 06:00 PM, Nicola Van Wilgen wrote:> Dear fellow R users, > > > > I would like to draw a "sunflowerplot" because I have data (decade by > month) that plots multiple times on the same x-y co-ordinates. Further I > would like to colour each of the points/sunflower leaves on the plot > according to the group they belong to (i.e. which type of event each > represents within that decade and month). I thought that this would be > relatively straight forward - I have a series of x and y co-ords and a > colour associated with each and I just use the column with the colours > in it to colour-code the points using col = column.name when calling the > plot. > > > > However, the sunflower plot uses the function "xy.coords" to calculate > the number of times that multiple points are plotted at the same > coordinates and in so doing creates a new dataset (x.coords, y.coords > and the number of times each is repeated) and this dataset no longer has > the colours associated with the individual points. The colours in a > resultant plot merely plot in the original order. > > > > I would like to know whether there is a way of associating the correct > colours with individual points that are now represented by the xy.coords > output. >Hi Nicola, I couldn't figure out a way to make sunflowerplot use the original colors, but this might help you: extremes.decade<- read.csv("extremes_decade.csv",stringsAsFactors=FALSE) library(plotrix) extreme.clusters<- cluster.overplot(extremes.decade$Decade,extremes.decade$Month, col=extremes.decade$Extreme) plot(extreme.clusters,col=extreme.clusters$col) Jim