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