Using the small reproducible example below, I'd like to know if one can
somehow use the matrix "sig" (defined below) to add a black outline
(with
lwd=2) to all pixels with a corresponding value of 1 in the matrix
'sig'?
So for example, in the ggplot2 plot below, the pixel located at [1,3] would
be outlined by a black square since the value at sig[1,3] == 1. This is my
first foray into ggplot2, and so far the googles hasn't helped me determine
if this is possible. Thanks, Eric
PS, my attempt to stretch the color scale such that (-1 * zmin) = zmax
max(abs(m1)) has failed (i.e., ..., autoscale = FALSE, zmin = -1 * zmax1,
zmax = zmax1), any pointers on this would greatly appreciated as well.
# Import packages
library(ggplot2)
library(RColorBrewer)
library(reshape2)
m1 <- matrix(c(
-0.0024, -0.0031, -0.0021, -0.0034, -0.0060, -1.00e-02, -8.47e-03, -0.0117,
-0.0075, -0.0043, -0.0026, -0.0021,
-0.0015, -0.0076, -0.0032, -0.0105, -0.0107, -2.73e-02, -3.37e-02, -0.0282,
-0.0149, -0.0070, -0.0046, -0.0039,
-0.0121, -0.0155, -0.0203, -0.0290, -0.0330, -3.19e-02, -1.74e-02, -0.0103,
-0.0084, -0.0180, -0.0162, -0.0136,
-0.0073, -0.0053, -0.0050, -0.0058, -0.0060, -4.38e-03, -2.21e-03, -0.0012,
-0.0026, -0.0026, -0.0034, -0.0073,
-0.0027, -0.0031, -0.0054, -0.0069, -0.0071, -6.28e-03, -2.88e-03, -0.0014,
-0.0031, -0.0037, -0.0030, -0.0027,
-0.0261, -0.0223, -0.0216, -0.0293, -0.0327, -3.17e-02, -1.77e-02, -0.0084,
-0.0059, -0.0060, -0.0120, -0.0157,
0.0045, 0.0006, -0.0031, -0.0058, -0.0093, -9.20e-03, -6.76e-03,
-0.0033, 0.0002, 0.0045, 0.0080, 0.0084,
-0.0021, -0.0018, -0.0020, -0.0046, -0.0080, -2.73e-03, 7.43e-04, 0.0004,
-0.0010, -0.0017, -0.0022, -0.0024,
-0.0345, -0.0294, -0.0212, -0.0194, -0.0192, -2.25e-02, -2.05e-02, -0.0163,
-0.0179, -0.0213, -0.0275, -0.0304,
-0.0034, -0.0038, -0.0040, -0.0045, -0.0059, -1.89e-03, 6.99e-05, -0.0050,
-0.0114, -0.0112, -0.0087, -0.0064,
-0.0051, -0.0061, -0.0052, -0.0035, 0.0012, -7.41e-06, -3.43e-03, -0.0055,
-0.0020, 0.0016, -0.0024, -0.0069,
-0.0061, -0.0068, -0.0089, -0.0107, -0.0104, -7.65e-03, 2.43e-03, 0.0008,
-0.0006, -0.0014, -0.0021, -0.0057,
0.0381, 0.0149, -0.0074, -0.0302, -0.0550, -6.40e-02, -5.28e-02, -0.0326,
-0.0114, 0.0121, 0.0367, 0.0501,
-0.0075, -0.0096, -0.0123, -0.0200, -0.0288, -2.65e-02, -2.08e-02, -0.0176,
-0.0146, -0.0067, -0.0038, -0.0029,
-0.0154, -0.0162, -0.0252, -0.0299, -0.0350, -3.40e-02, -2.51e-02, -0.0172,
-0.0139, -0.0091, -0.0119, -0.0156),
nrow = 15, ncol = 12, byrow=TRUE,
dimnames = list(rev(c("TH1", "IN1", "IN3",
"GL1", "LH1", "ED9", "TC1",
"TC2", "TC3", "UT1", "UT3",
"UT5", "GC1", "BC1", "WC1")),
c(format(seq(as.Date('2000-10-01'),
as.Date('2001-09-30'), by='month'), "%b"))))
# palette definition
palette <- colorRampPalette(c("darkblue", "blue",
"white", "red",
"darkred"))
# find max stretch value
zmax1 = max(abs(m1))
m1.melted <- melt(m1)
names(m1.melted) <- c('Site','Month',
'Concentration')
# Set up an example matrix with binary code for which results (pixels) are
significant
set.seed(4004)
sig <- matrix(round(abs(rnorm(15*12)/3)), nrow = 15, ncol = 12)
ggplot(m1.melted, aes(x = Month, y = Site, fill = Concentration), autoscale
= FALSE, zmin = -1 * zmax1, zmax = zmax1) +
geom_tile() +
coord_equal() +
scale_fill_gradient2(low = "darkred",
mid = "white",
high = "darkblue",
midpoint = 0)
[[alternative HTML version deleted]]
Hi Eric,
you can use an annotate-layer, eg
ind<-which(sig>0,arr.ind = T)
ggplot(m1.melted, aes(x = Month, y = Site, fill = Concentration), autoscale
= FALSE, zmin = -1 * zmax1, zmax = zmax1) +
geom_tile() +
coord_equal() +
scale_fill_gradient2(low = "darkred",
mid = "white",
high = "darkblue",
midpoint = 0)
+annotate("rect",ymin=ind[,"row"]-.5,ymax=.5+ind[,"row"],
xmin=-.5+ind[,"col"],xmax=.5+ind[,"col"],colour="red",
size=.5,
linetype=1, fill=NA)
Cheers
Am 20.12.2017 um 01:32 schrieb Morway, Eric:> library(ggplot2)
> library(RColorBrewer)
> library(reshape2)
>
> m1 <- matrix(c(
> -0.0024, -0.0031, -0.0021, -0.0034, -0.0060, -1.00e-02, -8.47e-03, -0.0117,
> -0.0075, -0.0043, -0.0026, -0.0021,
> -0.0015, -0.0076, -0.0032, -0.0105, -0.0107, -2.73e-02, -3.37e-02, -0.0282,
> -0.0149, -0.0070, -0.0046, -0.0039,
> -0.0121, -0.0155, -0.0203, -0.0290, -0.0330, -3.19e-02, -1.74e-02, -0.0103,
> -0.0084, -0.0180, -0.0162, -0.0136,
> -0.0073, -0.0053, -0.0050, -0.0058, -0.0060, -4.38e-03, -2.21e-03, -0.0012,
> -0.0026, -0.0026, -0.0034, -0.0073,
> -0.0027, -0.0031, -0.0054, -0.0069, -0.0071, -6.28e-03, -2.88e-03, -0.0014,
> -0.0031, -0.0037, -0.0030, -0.0027,
> -0.0261, -0.0223, -0.0216, -0.0293, -0.0327, -3.17e-02, -1.77e-02, -0.0084,
> -0.0059, -0.0060, -0.0120, -0.0157,
> 0.0045, 0.0006, -0.0031, -0.0058, -0.0093, -9.20e-03, -6.76e-03,
> -0.0033, 0.0002, 0.0045, 0.0080, 0.0084,
> -0.0021, -0.0018, -0.0020, -0.0046, -0.0080, -2.73e-03, 7.43e-04, 0.0004,
> -0.0010, -0.0017, -0.0022, -0.0024,
> -0.0345, -0.0294, -0.0212, -0.0194, -0.0192, -2.25e-02, -2.05e-02, -0.0163,
> -0.0179, -0.0213, -0.0275, -0.0304,
> -0.0034, -0.0038, -0.0040, -0.0045, -0.0059, -1.89e-03, 6.99e-05, -0.0050,
> -0.0114, -0.0112, -0.0087, -0.0064,
> -0.0051, -0.0061, -0.0052, -0.0035, 0.0012, -7.41e-06, -3.43e-03, -0.0055,
> -0.0020, 0.0016, -0.0024, -0.0069,
> -0.0061, -0.0068, -0.0089, -0.0107, -0.0104, -7.65e-03, 2.43e-03, 0.0008,
> -0.0006, -0.0014, -0.0021, -0.0057,
> 0.0381, 0.0149, -0.0074, -0.0302, -0.0550, -6.40e-02, -5.28e-02, -0.0326,
> -0.0114, 0.0121, 0.0367, 0.0501,
> -0.0075, -0.0096, -0.0123, -0.0200, -0.0288, -2.65e-02, -2.08e-02, -0.0176,
> -0.0146, -0.0067, -0.0038, -0.0029,
> -0.0154, -0.0162, -0.0252, -0.0299, -0.0350, -3.40e-02, -2.51e-02, -0.0172,
> -0.0139, -0.0091, -0.0119, -0.0156),
> nrow = 15, ncol = 12, byrow=TRUE,
> dimnames = list(rev(c("TH1", "IN1", "IN3",
"GL1", "LH1", "ED9", "TC1",
> "TC2", "TC3", "UT1", "UT3",
"UT5", "GC1", "BC1", "WC1")),
> c(format(seq(as.Date('2000-10-01'),
> as.Date('2001-09-30'), by='month'), "%b"))))
>
> # palette definition
> palette <- colorRampPalette(c("darkblue", "blue",
"white", "red",
> "darkred"))
>
> # find max stretch value
> zmax1 = max(abs(m1))
>
> m1.melted <- melt(m1)
> names(m1.melted) <- c('Site','Month',
'Concentration')
>
> # Set up an example matrix with binary code for which results (pixels) are
> significant
> set.seed(4004)
> sig <- matrix(round(abs(rnorm(15*12)/3)), nrow = 15, ncol = 12)
>
> ggplot(m1.melted, aes(x = Month, y = Site, fill = Concentration), autoscale
> = FALSE, zmin = -1 * zmax1, zmax = zmax1) +
> geom_tile() +
> coord_equal() +
> scale_fill_gradient2(low = "darkred",
> mid = "white",
> high = "darkblue",
> midpoint = 0)
--
Eik Vettorazzi
Department of Medical Biometry and Epidemiology
University Medical Center Hamburg-Eppendorf
Martinistrasse 52
building W 34
20246 Hamburg
Phone: +49 (0) 40 7410 - 58243
Fax: +49 (0) 40 7410 - 57790
Web: www.uke.de/imbe
--
_____________________________________________________________________
Universit?tsklinikum Hamburg-Eppendorf; K?rperschaft des ?ffentlichen Rechts;
Gerichtsstand: Hamburg | www.uke.de
Vorstandsmitglieder: Prof. Dr. Burkhard G?ke (Vorsitzender), Prof. Dr. Dr. Uwe
Koch-Gromus, Joachim Pr?l?, Martina Saurin (komm.)
_____________________________________________________________________
SAVE PAPER - THINK BEFORE PRINTING
I apprecaite the guidance Eik, that works great! I'm also wondering if you have any pointers for how I might stretch the color scale so that the max and min values are the same? Right now, the min is -0.064 and the max is something closer to 0.04. As you can see in what I sent, I tried adding: zmax1 = max(abs(m1)) ggplot(..., autoscale = FALSE, zmin = -1 * zmax1, zmax = zmax1) + ... to ggplot, but I'm either using the wrong arguments or have not added them to the correct spot. I haven't been able to find the fix for this and would very much appreciate any further guidance you can offer for this last fix. [[alternative HTML version deleted]]