The scale of the dimensionless, qualitative, or relative axes ggplot2

Suppose I have the following diagram

dat <- data.frame(x = 1:10, y = 1:10)

ggplot(dat, aes(x=x, y=y)) + geom_point()

but I'm actually not interested in the values 2.5, 5, 7.5, 10on any axis. All I want to mention is something like "low to high." I know that I can mark + xlab("Low to High"), but I would prefer that “Low” is in the left corner of the axis (under the beginning) and “High” to be in the far right corner (under 10.0), possibly using the arrow from Low → High . I could specify breaks manually, but this seems like too much kludge.

+4
source share
2 answers

Something like this might help,

dat <- data.frame(x = 1:10, y = 1:10)

p <- ggplot(dat, aes(x=x, y=y)) + geom_point() +
  scale_x_continuous('', breaks=NULL)+
  scale_y_continuous('', breaks=NULL)

g <- ggplotGrob(p)
library(gtable)
library(grid)

my_axis <- function(low="low", high="high", axis=c("x", "y"), ...){

  axis <- match.arg(axis)

  if(axis == "x"){
  g1 <- textGrob(low, x=unit(0,"npc"), hjust=0)
  g3 <- textGrob(high, x=unit(1,"npc"), hjust=1)
  g2 <- segmentsGrob(grobWidth(g1) + unit(2,"mm"), unit(0.5,"npc"),
               unit(1,"npc") - grobWidth(g3)- unit(2,"mm"), 
               unit(0.5,"npc"), ...)

  } else if(axis == "y"){
    g1 <- textGrob(low, y=unit(0,"npc"), rot=90, hjust=0)
    g3 <- textGrob(high, y=unit(1,"npc"), rot=90, hjust=1)
    g2 <- segmentsGrob(unit(0.5,"npc"),grobHeight(g1) + unit(2,"mm"), 
                       unit(0.5,"npc"),
                       unit(1,"npc") - grobHeight(g3)- unit(2,"mm"), 
                       ...)

  }

  grobTree(g1,g2,g3)
}

g <- gtable_add_grob(g, my_axis(arrow=arrow(length=unit(2,"mm"))), 
                     t=nrow(g)-2, b=nrow(g)-1, l=4)
g <- gtable_add_grob(g, my_axis(axis="y", arrow=arrow(length=unit(2,"mm"))), 
                     t=3, l=1,r=3)
grid.newpage()
grid.draw(g)

enter image description here

+8
source

, " --- > ", ,

dat <- data.frame(x = 1:10, y = 1:10)
low_to_high <- paste0("low   ", paste0(rep("-", 35), collapse = ""), ">   high")

library(ggplot2)
ggplot(dat, aes(x, y)) + 
  geom_point() +
  labs(x = low_to_high, y = low_to_high) +
  coord_equal() +
  theme_bw() +
  theme(axis.title = element_text(size=20), 
        axis.text = element_blank(),
        axis.ticks = element_blank())

enter image description here

, - , , . , .

0

All Articles