Home > Software engineering >  How to change the Y-axis tick label to custom expression in GGPLOT
How to change the Y-axis tick label to custom expression in GGPLOT

Time:12-02

Let say I have below ggplot

library(zoo)
library(quantmod)
library(ggplot2)
Data = data.frame('class' = rep(c('a', 'b', 'c'), 2), 'Date' = as.yearqtr(rep(c('2021 Q3', '2021 Q4'), each = 3)), 'Value' = 1:6)
Met = 'Per'
FN = function(y, class) ifelse(y == 0, 'y', ifelse(grepl('Per', class), paste0(y * 100, ' aa1'), paste0(y / 100, ' aa2')))
ggplot(Data, aes(x = Date, y = Value, fill = class))  
    geom_bar(stat = 'identity', position = 'dodge', width = 0.1)  
    scale_y_continuous(labels = function(y) FN(y, Met))

With this I am getting below plot :

enter image description here

In this plot all my Y-axis labels are 0, whereas I wanted to have "100 aa1" "200 aa1" "300 aa1" "400 aa1" "500 aa1" "600 aa1"

Any pointer what went wrong in my code will be very helpful.

CodePudding user response:

If you mean paste0(Data$Value * 100, ' %') is like 200%, 400%,... then you may use scales::percent

ggplot(Data, aes(x = Date, y = Value, fill = class))  
  geom_bar(stat = 'identity', position = 'dodge', width = 0.1)  
  scale_y_continuous(labels = scales::percent)

enter image description here

FN(Data$Value, Met)
[1] "100 %" "100 %" "100 %" "100 %" "100 %" "100 %"

sapply(Data$Value, function(x) FN(x, Met))
[1] "100 %" "200 %" "300 %" "400 %" "500 %" "600 %"
  • Related