Let me try to explain this then.

I have numbers like 

DataToPlot
          4         5         6
1 0.4454995 0.4462009 0.4286807
2 0.3761550 0.5423205 0.6500785
3 0.3779496 0.4671437 0.1799601


and I want to have a color legend with each color that is mapped to the following printed values

"1","0.9","0.8","0.7","0.6","0.5","0.4","0.3","0.2","0.1","0"

For making life easier I have rounded up my number to one digit so

  matrixToPlot<-matrix(data=round(matrixToPlot,digits=1),nrow=nrow(matrixToPlot),ncol=ncol(matrixToPlot),dimnames=list(yLabel, xLabel))
matrixToPlot
    1   2   3
1 0.4 0.4 0.4
2 0.4 0.5 0.7
3 0.4 0.5 0.2


that indeed helps and makes the legend bar print the right values BUT there are not all the ranges printed there. So for the given example data set only the 0.2, 0.3,0.4,0.5,0.6,0.7 are printed with the 0,0.1,0.8,0.9,1 missing.
Also I need some help to specify specific color to each of the given categories/ranges in the colorbar

my code now looks like


library(reshape2)
        library(ggplot2)
        matrixToPlot<-matrix(data=runif(9),nrow=3,dimnames=list(seq(1,3),seq(4,6)))
    matrixToPlot<-matrix(data=round(matrixToPlot,digits=1),nrow=nrow(matrixToPlot),ncol=ncol(matrixToPlot),dimnames=list(seq(1:3), seq(4:6)))
    tdm <- melt(matrixToPlot)
        cols<-colours()
        cols<-cols[1:(nrow(matrixToPlot)*ncol(matrixToPlot))]
        p<- ggplot(tdm, aes(x = Var2, y = Var1, fill = factor(value))) +
                  labs(x = "MHz", y = "Threshold", fill = "Duty Cycle") +
                  geom_raster(alpha=.5) +
                  scale_fill_discrete(h.start=1) +
                  scale_x_continuous(expand = c(0, 0)) +
                  scale_y_continuous(expand = c(0, 0)) 



Regards
Alex




________________________________
 From: Ista Zahn <istazahn@gmail.com>

Cc: R help <R-help@r-project.org> 
Sent: Thursday, February 21, 2013 2:15 PM
Subject: Re: [R] ggplot2 customizing a plot

Hi,


> Hello Ista,
[[elided Yahoo spam]]
>
> Your code is indeed an improvement.
>
> This is my code now and there are two things still missing.
>
> DataToPlot<-matrix(data=runif(9),nrow=3,dimnames=list(seq(1,3),seq(4,6)))
> require(reshape)
> require(ggplot2)
> require(raster)
>
>
> cols<-colours()
> cols<-cols[1:(nrow(DataToPlot)*ncol(DataToPlot))]
> tdm<-melt(DataToPlot)
>
> p<- ggplot(tdm, aes(x = Var2, y = Var1, fill = factor(value))) +
> labs(x = "MHz", y = "Threshold", fill = "Duty Cycle") +
> geom_raster(alpha=.5) +
> scale_fill_manual(values=cols,breaks=c("1","0.9","0.8","0.7","0.6","0.5","0.4","0.3","0.2","0.1","0"))

value looks like numbers, why are you converting it to a factor?

why this is how I found I should solve the problem......

>
> My values go from 0 to 1 (might go slightly over the limits) and I want to
> specify one color for the following ranges, 1, 0.9,0.8,.....,0 .  That means
> that values between the intervals will be "categorized" based on their
> closest match.

I don't really understand this.



> What I also tried is to create a gray scale pallete as this is printer
> friendly so the values from 0.9 to 0.1 get a greyish tone but I failed to do
> that with colours.

How about

ggplot(tdm, aes(x = Var2, y = Var1, fill = value)) +
  labs(x = "MHz", y = "Threshold", fill = "Duty Cycle") +
  geom_raster(alpha=.5) +
  scale_fill_gradient(low="gray90", high="black") +
  theme_bw()

>
> Could you please help me have both
> a. A fixed scale where values are categorized there
> and

Value is numeric, and trying to treat it like a category is only going
to make things difficult.

> b. a greyish pallete for the categories?

Use scale_fill_gradient with different shades of gray as the low and
high values, as shown above.

Best,
Ista

>
> I would like to thank you in advance for your reply
>
> Regards
> Alex
>
>
> ________________________________
> From: Ista Zahn <istazahn@gmail.com>

> Cc: R help <R-help@r-project.org>
> Sent: Wednesday, February 20, 2013 4:54 PM
> Subject: Re: [R] ggplot2 customizing a plot
>
> Hi,
>

>> Dear all,
>> I want some help improve my ggplot as following:
>> Make the plottable area with grid, so is easy one to see where each box
>> refers to x and y values.
>
> I don't think you can easily move the grid to the front, but you can
> make the tiles transparent so the grid can be seen through them by
> setting the alpha < 1.
>
>> Add a color bar but with fixed values, that I want to specify.
>
> use scale_fill_manual
>
>> How  I can do those two?
>
> p<- ggplot(tdm, aes(x = Var2, y = Var1, fill = factor(value))) +
>   labs(x = "MHz", y = "Threshold", fill = "Duty Cycle") +
>   geom_raster(alpha=.5) +
>   scale_fill_manual(values=c("red", "blue", "green", "purple",
> "orange", "pink", "tan", "violet", "yellow"))
>
>
> Best,
> Ista
>
>
>>
>> Before is some code what I have tried so far.
>>
>> Regards
>> Alex
>>
>>
>> DataToPlot<-matrix(data=seq(1:9),nrow=3,dimnames=list(seq(1,3),seq(4,6)))
>>
>>
>> require(reshape)
>> require(ggplot2)
>> require(raster)
>>
>>  tdm <- melt(DataToPlot)
>>
>>
>>
>> p<- ggplot(tdm, aes(x = Var2, y = Var1, fill = factor(value))) +
>>            labs(x = "MHz", y = "Threshold", fill = "Duty Cycle") +
>>            geom_raster() +
>>            scale_fill_discrete()
>>
>>        [[alternative HTML version deleted]]
>>
>>
>> ______________________________________________
>> R-help@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.
>>
>
>
	[[alternative HTML version deleted]]

