[R] editing plot

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri Jan 10 13:58:51 CET 2020


Hello,

There are ways of reducing the white space between the bars but they are 
not obvious. Here are the two ways that I know.

First a data example.

library(ggplot2)
library(gridExtra)

df1 <- data.frame(x = LETTERS[1:5],
                   y = c(40, 15, 30, 15, 20))


1. The examples that follow set argument width in two places. What is 
important is the relative magnitudes of width and position_dodge(width).

If width is bigger than position_dodge(width) then the bar sizes and the 
space between them do not change. They only change if the second width 
is bigger. In this case the first argument makes a difference. Run the 
examples to see what I mean.


g1 <- ggplot(df1, aes(x, y)) +
   geom_bar(stat = "identity",
            width = 0.8,
            position = position_dodge(width = 0.5))

g2 <- ggplot(df1, aes(x, y)) +
   geom_bar(stat = "identity",
            width = 0.8,
            position = position_dodge(width = 0.25))

g3 <- ggplot(df1, aes(x, y)) +
   geom_bar(stat = "identity",
            width = 0.5,
            position = position_dodge(width = 0.8))

g4 <- ggplot(df1, aes(x, y)) +
   geom_bar(stat = "identity",
            width = 0.25,
            position = position_dodge(width = 0.8))

grid.arrange(g31, g2, g3, g4)


2. The other way is to shrink the plot by changing its aspect ratio.

g3 + theme(aspect.ratio = 2/1)

grid.arrange(g3, g3 + theme(aspect.ratio = 2/1), nrow = 1)


Run the examples and try to do something out of this.


Hope this helps,

Rui Barradas


Às 16:41 de 09/01/20, Ana Marija escreveu:
> HI Rui,
> 
> Thank you so much for getting back to me!
> I did implement your idea (see attach):
> 
> ax.11.text <- element_text(size = 10)
> ay.11.text <- element_text(size = 10)
> p<-ggplot(data=toplot, aes(x=cat, y=props)) +
>    geom_bar(stat="identity",width=0.5, fill="steelblue")+
>    geom_errorbar(aes(ymin=props-1.96*ses, ymax=props+1.96*ses), width=.1,
>                  position=position_dodge(.9))  +
> 
>    geom_signif(comparisons=list( c("All eQTL", "eQTL from 103 genes"),
>                                 c("All SNPs", "eQTL from 103 genes")),
>                y_position=c(0.065, 0.07), tip_length=0, annotation=c("p
> = 0.0012", "p = 0.0023")) +
>    scale_y_continuous(breaks=seq(0,.06,by=.01)) +
>    xlab("") + ylab("Proportion p-values < 0.05") +
>    theme_classic()+
>    theme(panel.grid.major.x = element_line(size = 0.1, color = "grey"),
>          panel.grid.major.y = element_blank(),
>          panel.grid.minor = element_blank(),axis.text.x =
> ax.11.text,axis.text.y=ay.11.text
>    )
> p
> 
> I was wondering is there is any way to decrease the amount of white
> spaces around the bars?
> 
> Thanks
> Ana
> 
> On Wed, Jan 8, 2020 at 2:58 PM Rui Barradas <ruipbarradas using sapo.pt> wrote:
>>
>> Hello,
>>
>> Maybe
>>
>>
>> theme(panel.grid.major.x = element_line(size = 0.1, color = "grey"),
>>           panel.grid.major.y = element_blank(),
>>           panel.grid.minor = element_blank()
>>     )
>>
>>
>>
>> Note that if you remove the y axis grid you must set the x axis grid
>> explicitly.
>>
>> Hope this helps,
>>
>> Rui Barradas
>>
>> Às 18:52 de 08/01/20, Ana Marija escreveu:
>>> Hello,
>>>
>>> I have this plot in attach. I was wondering how can I change my
>>> plotting code in order to remove these gray horizontal background
>>> lines but keep these two vertical lines? These two vertical lines
>>> don't need to be gray, can be any other type of lines but they must be
>>> at the same place. Also how can I make these two bars narrower?
>>>
>>> library("ggplot2")
>>> p<-ggplot(data=toplot, aes(x=cat, y=props)) +
>>>     geom_bar(stat="identity", fill="steelblue")+
>>>     geom_errorbar(aes(ymin=props-1.96*ses, ymax=props+1.96*ses), width=.2,
>>>                   position=position_dodge(.9))  +
>>>
>>>     geom_signif(comparisons=list( c("All eQTL", "eQTL from 103 genes"),
>>>                                  c("All SNPs", "eQTL from 103 genes")),
>>>                 y_position=c(0.065, 0.07), tip_length=0, annotation=c("p
>>> = 0.0012", "p = 0.0023")) +
>>>     scale_y_continuous(breaks=seq(0,.06,by=.01)) +
>>>     xlab("") + ylab("Proportion p-values < 0.05") +
>>>     theme_minimal()
>>> p
>>>
>>>
>>> ______________________________________________
>>> R-help using 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.
>>>



More information about the R-help mailing list