Currently I am using these settings in ggplot to make a gradient from red to blue. geom_point( aes(x, y, color=z) ) + scale_colour_gradient(low = "red",high = "blue") + z is a ratio, and currently I am able to identify which have high and low values, but I'd really like to be able to distinguish which are >1, <1, or close to 1 by color. It would be great if I could set a middle color in this gradient (eg. green) that is set the the value of 1, even if that is not the exact midpoint between my highest and lowest values. Is there a way to do this in R? Thank you, April
ggplot 3-color gradient scales
7 messages · April Ettington, Jeff Newmiller, Rui Barradas +1 more
Check out scale_colour_gradient2()
On August 23, 2020 8:12:06 PM PDT, April Ettington <aprilettington at gmail.com> wrote:
Currently I am using these settings in ggplot to make a gradient from red to blue. geom_point( aes(x, y, color=z) ) + scale_colour_gradient(low = "red",high = "blue") + z is a ratio, and currently I am able to identify which have high and low values, but I'd really like to be able to distinguish which are >1, <1, or close to 1 by color. It would be great if I could set a middle color in this gradient (eg. green) that is set the the value of 1, even if that is not the exact midpoint between my highest and lowest values. Is there a way to do this in R? Thank you, April [[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
Sent from my phone. Please excuse my brevity.
Hello,
Note that the midpoint argument can make a big difference. In the code
below try commenting out the line where the default is changed.
f <- function(x){
(x - min(x))/(max(x) - min(x))
}
library(ggplot2)
df1 <- iris[3:5]
names(df1)[1:2] <- c("x", "y")
df1$z <- ave(df1$y, df1$Species, FUN = f)
ggplot(df1) +
geom_point( aes(x, y, color = z) ) +
scale_color_gradient2(low = "red",
mid = "yellow",
high = "blue",
midpoint = 0.5
)
Hope this helps,
Rui Barradas
?s 04:43 de 24/08/20, Jeff Newmiller escreveu:
Check out scale_colour_gradient2() On August 23, 2020 8:12:06 PM PDT, April Ettington <aprilettington at gmail.com> wrote:
Currently I am using these settings in ggplot to make a gradient from red to blue. geom_point( aes(x, y, color=z) ) + scale_colour_gradient(low = "red",high = "blue") + z is a ratio, and currently I am able to identify which have high and low values, but I'd really like to be able to distinguish which are >1, <1, or close to 1 by color. It would be great if I could set a middle color in this gradient (eg. green) that is set the the value of 1, even if that is not the exact midpoint between my highest and lowest values. Is there a way to do this in R? Thank you, April [[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
Thank you so much!
On Mon, Aug 24, 2020 at 5:33 PM Rui Barradas <ruipbarradas at sapo.pt> wrote:
Hello,
Note that the midpoint argument can make a big difference. In the code
below try commenting out the line where the default is changed.
f <- function(x){
(x - min(x))/(max(x) - min(x))
}
library(ggplot2)
df1 <- iris[3:5]
names(df1)[1:2] <- c("x", "y")
df1$z <- ave(df1$y, df1$Species, FUN = f)
ggplot(df1) +
geom_point( aes(x, y, color = z) ) +
scale_color_gradient2(low = "red",
mid = "yellow",
high = "blue",
midpoint = 0.5
)
Hope this helps,
Rui Barradas
?s 04:43 de 24/08/20, Jeff Newmiller escreveu:
Check out scale_colour_gradient2() On August 23, 2020 8:12:06 PM PDT, April Ettington <
aprilettington at gmail.com> wrote:
Currently I am using these settings in ggplot to make a gradient from
red
to blue.
geom_point( aes(x, y, color=z) ) +
scale_colour_gradient(low = "red",high = "blue") +
z is a ratio, and currently I am able to identify which have high and
low
values, but I'd really like to be able to distinguish which are >1, <1,
or
close to 1 by color. It would be great if I could set a middle color
in
this gradient (eg. green) that is set the the value of 1, even if that
is
not the exact midpoint between my highest and lowest values. Is there
a
way to do this in R?
Thank you,
April
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
1 day later
Is there a way to set it to 3 color categories instead of a gradient? Like if the color is based on the numbers in a dataframe column, can I make it so anything >1.2 is red, <0.8 is blue, and anything in the middle is green? On Mon, Aug 24, 2020 at 6:28 PM April Ettington <aprilettington at gmail.com> wrote:
Thank you so much! On Mon, Aug 24, 2020 at 5:33 PM Rui Barradas <ruipbarradas at sapo.pt> wrote:
Hello,
Note that the midpoint argument can make a big difference. In the code
below try commenting out the line where the default is changed.
f <- function(x){
(x - min(x))/(max(x) - min(x))
}
library(ggplot2)
df1 <- iris[3:5]
names(df1)[1:2] <- c("x", "y")
df1$z <- ave(df1$y, df1$Species, FUN = f)
ggplot(df1) +
geom_point( aes(x, y, color = z) ) +
scale_color_gradient2(low = "red",
mid = "yellow",
high = "blue",
midpoint = 0.5
)
Hope this helps,
Rui Barradas
?s 04:43 de 24/08/20, Jeff Newmiller escreveu:
Check out scale_colour_gradient2() On August 23, 2020 8:12:06 PM PDT, April Ettington <
aprilettington at gmail.com> wrote:
Currently I am using these settings in ggplot to make a gradient from
red
to blue.
geom_point( aes(x, y, color=z) ) +
scale_colour_gradient(low = "red",high = "blue") +
z is a ratio, and currently I am able to identify which have high and
low
values, but I'd really like to be able to distinguish which are >1, <1,
or
close to 1 by color. It would be great if I could set a middle color
in
this gradient (eg. green) that is set the the value of 1, even if that
is
not the exact midpoint between my highest and lowest values. Is there
a
way to do this in R?
Thank you,
April
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
Hi Maybe scale_colour_manual? Cheers Petr
-----Original Message----- From: R-help <r-help-bounces at r-project.org> On Behalf Of April Ettington Sent: Tuesday, August 25, 2020 11:39 AM To: Rui Barradas <ruipbarradas at sapo.pt> Cc: r-help at r-project.org Subject: Re: [R] ggplot 3-color gradient scales Is there a way to set it to 3 color categories instead of a gradient? Like if the color is based on the numbers in a dataframe column, can I make it so anything >1.2 is red, <0.8 is blue, and anything in the middle is green? On Mon, Aug 24, 2020 at 6:28 PM April Ettington <aprilettington at gmail.com> wrote:
Thank you so much! On Mon, Aug 24, 2020 at 5:33 PM Rui Barradas <ruipbarradas at sapo.pt>
wrote:
Hello,
Note that the midpoint argument can make a big difference. In the
code below try commenting out the line where the default is changed.
f <- function(x){
(x - min(x))/(max(x) - min(x))
}
library(ggplot2)
df1 <- iris[3:5]
names(df1)[1:2] <- c("x", "y")
df1$z <- ave(df1$y, df1$Species, FUN = f)
ggplot(df1) +
geom_point( aes(x, y, color = z) ) +
scale_color_gradient2(low = "red",
mid = "yellow",
high = "blue",
midpoint = 0.5
)
Hope this helps,
Rui Barradas
?s 04:43 de 24/08/20, Jeff Newmiller escreveu:
Check out scale_colour_gradient2() On August 23, 2020 8:12:06 PM PDT, April Ettington <
aprilettington at gmail.com> wrote:
Currently I am using these settings in ggplot to make a gradient
from red to blue.
geom_point( aes(x, y, color=z) ) + scale_colour_gradient(low =
"red",high = "blue") +
z is a ratio, and currently I am able to identify which have high
and low values, but I'd really like to be able to distinguish
which are >1, <1, or close to 1 by color. It would be great if I
could set a middle color in this gradient (eg. green) that is set
the the value of 1, even if that is not the exact midpoint between
my highest and lowest values. Is there a way to do this in R?
Thank you,
April
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
Hello,
If you want a predetermined number of colors, discretise the data and
use scale_color_manual. In the code below I first compute another vector
z, with a different range, 0 to 2. (In my first mail it was 0 to 1.)
g <- function(x, a = 0, b = 1){
(b - a)*(x - min(x))/(max(x) - min(x)) + a
}
library(ggplot2)
df1 <- iris[3:5]
names(df1)[1:2] <- c("x", "y")
df1$z <- ave(df1$y, df1$Species, FUN = function(x) g(x, a = 0, b = 2))
Now is the step that solves the problem, to bin the vector. Other
options could include findInterval. Then the two plot instructions are
equivalent.
df1$z <- cut(df1$z,
breaks = c(-Inf, 0.8, 1.2, Inf),
labels = c("Small", "Medium", "Large"))
ggplot(df1) +
geom_point( aes(x, y, color = z) ) +
scale_color_manual(values = c("red", "green", "blue"))
ggplot(df1) +
geom_point( aes(x, y, color = z) ) +
scale_color_manual(breaks = c("Small", "Medium", "Large"),
values = c("Small" = "red", "Medium" = "green",
"Large" = "blue"))
Hope this helps,
Rui Barradas
?s 10:38 de 25/08/20, April Ettington escreveu:
Is there a way to set it to 3 color categories instead of a gradient?
Like if the color is based on the numbers in a dataframe column, can I
make it so anything >1.2 is red, <0.8 is blue, and anything in the
middle is green?
On Mon, Aug 24, 2020 at 6:28 PM April Ettington
<aprilettington at gmail.com <mailto:aprilettington at gmail.com>> wrote:
Thank you so much!
On Mon, Aug 24, 2020 at 5:33 PM Rui Barradas <ruipbarradas at sapo.pt
<mailto:ruipbarradas at sapo.pt>> wrote:
Hello,
Note that the midpoint argument can make a big difference. In
the code
below try commenting out the line where the default is changed.
f <- function(x){
? ?(x - min(x))/(max(x) - min(x))
}
library(ggplot2)
df1 <- iris[3:5]
names(df1)[1:2] <- c("x", "y")
df1$z <- ave(df1$y, df1$Species, FUN = f)
ggplot(df1) +
? ?geom_point( aes(x, y, color = z) ) +
? ?scale_color_gradient2(low = "red",
? ? ? ? ? ? ? ? ? ? ? ? ?mid = "yellow",
? ? ? ? ? ? ? ? ? ? ? ? ?high = "blue",
? ? ? ? ? ? ? ? ? ? ? ? ?midpoint = 0.5
? ? ? ? ? ? ? ? ? ? ? ? ?)
Hope this helps,
Rui Barradas
?s 04:43 de 24/08/20, Jeff Newmiller escreveu:
> Check out scale_colour_gradient2()
>
> On August 23, 2020 8:12:06 PM PDT, April Ettington
<aprilettington at gmail.com <mailto:aprilettington at gmail.com>> wrote:
>> Currently I am using these settings in ggplot to make a
gradient from
>> red
>> to blue.
>>
>> geom_point( aes(x, y, color=z) ) +
>> scale_colour_gradient(low = "red",high = "blue") +
>>
>> z is a ratio, and currently I am able to identify which have
high and
>> low
>> values, but I'd really like to be able to distinguish which
are >1, <1,
>> or
>> close to 1 by color.? It would be great if I could set a
middle color
>> in
>> this gradient (eg. green) that is set the the value of 1,
even if that
>> is
>> not the exact midpoint between my highest and lowest
values.? Is there
>> a
>> way to do this in R?
>>
>> Thank you,
>> April
>>
>>? ? ? [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org <mailto:R-help at r-project.org> mailing
list -- To UNSUBSCRIBE and more, see
>> 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.
>