Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to extend x-axis and y-axis and narrow the gap in ggthemes::theme_tufte()

Tags:

r

ggplot2

I have the following nibble:


library(tidyverse)
#> + ggplot2 2.2.1.9000        Date: 2017-06-23
#> + tibble  1.3.3                R: 3.3.2
#> + tidyr   0.6.3              GUI: X11
#> + readr   1.1.1           Locale: en_US.UTF-8
#> + purrr   0.2.2.2             TZ: Asia/Tokyo
#> + dplyr   0.7.0           
#> + stringr 1.2.0
#> Conflicts -----------------------------------------------------------------
#> * filter(),  from dplyr, masks stats::filter()
#> * lag(),     from dplyr, masks stats::lag()
tbl <- structure(list(sample = c("Fx", "Vx"), nof_degs = c(6038L, 
3606L)), .Names = c("sample", "nof_degs"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -2L))

tbl
#> # A tibble: 2 x 2
#>   sample nof_degs
#>    <chr>    <int>
#> 1     Fx     6038
#> 2     Vx     3606

With the following code:

library(ggthemes)
ggplot(tbl, aes(x=sample,y=nof_degs)) +
geom_histogram(position=position_dodge(0.01), colour="black", stat="identity", width=0.2) +
  geom_rangeframe() + 
  theme_tufte() +
  theme(axis.ticks.length = unit(7, "pt"))

As shown in the image below:

enter image description here

like image 443
neversaint Avatar asked Jun 23 '17 08:06

neversaint


1 Answers

Let me know if this is close enough:

ggplot(df, aes(x=sample,y=nof_degs)) +
  geom_histogram(position=position_dodge(0.01), colour="black",
                 stat="identity", width=0.8) +
  geom_rangeframe(y=c(0, max(df$nof_degs))) + 
  theme_tufte() +
  theme(axis.ticks.length = unit(5, "pt"))

enter image description here

Another option is with aspect.ratio:

ggplot(df, aes(x=sample,y=nof_degs)) +
  geom_histogram(position=position_dodge(2), colour="black",
                 stat="identity", width = 0.6) +
  geom_rangeframe(y=c(0, max(df$nof_degs))) + 
  theme_tufte() +
  theme(aspect.ratio = 2) +
  theme(axis.ticks.length = unit(5, "pt"))

enter image description here

You can play around with width and aspect.ratio parameters to get a desired plot. For example width = 0.8 and aspect.ratio = 1.5:

enter image description here

like image 67
AK88 Avatar answered Oct 05 '22 22:10

AK88