Rotating x axis labels in R for barplot

后端 未结 8 611
暖寄归人
暖寄归人 2020-11-27 12:29

I am trying to get the x axis labels to be rotated 45 degrees on a barplot with no luck. This is the code I have below:

barplot(((data1[,1] - average)/averag         


        
相关标签:
8条回答
  • 2020-11-27 12:38

    You can simply pass your data frame into the following function:

    rotate_x <- function(data, column_to_plot, labels_vec, rot_angle) {
        plt <- barplot(data[[column_to_plot]], col='steelblue', xaxt="n")
        text(plt, par("usr")[3], labels = labels_vec, srt = rot_angle, adj = c(1.1,1.1), xpd = TRUE, cex=0.6) 
    }
    

    Usage:

    rotate_x(mtcars, 'mpg', row.names(mtcars), 45)
    

    You can change the rotation angle of the labels as needed.

    0 讨论(0)
  • 2020-11-27 12:39

    EDITED ANSWER PER DAVID'S RESPONSE:

    Here's a kind of hackish way. I'm guessing there's an easier way. But you could suppress the bar labels and the plot text of the labels by saving the bar positions from barplot and do a little tweaking up and down. Here's an example with the mtcars data set:

    x <- barplot(table(mtcars$cyl), xaxt="n")
    labs <- paste(names(table(mtcars$cyl)), "cylinders")
    text(cex=1, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)
    
    0 讨论(0)
  • 2020-11-27 12:39

    use optional parameter las=2 .

    barplot(mytable,main="Car makes",ylab="Freqency",xlab="make",las=2)
    

    enter image description here

    0 讨论(0)
  • 2020-11-27 12:41

    You can use ggplot2 to rotate the x-axis label adding an additional layer

    theme(axis.text.x = element_text(angle = 90, hjust = 1))
    
    0 讨论(0)
  • 2020-11-27 12:44

    You may use

    par(las=2) # make label text perpendicular to axis
    

    It is written here: http://www.statmethods.net/graphs/bar.html

    0 讨论(0)
  • 2020-11-27 12:44

    In the documentation of Bar Plots we can read about the additional parameters (...) which can be passed to the function call:

    ...    arguments to be passed to/from other methods. For the default method these can 
           include further arguments (such as axes, asp and main) and graphical 
           parameters (see par) which are passed to plot.window(), title() and axis.
    

    In the documentation of graphical parameters (documentation of par) we can see:

    las
        numeric in {0,1,2,3}; the style of axis labels.
    
        0:
          always parallel to the axis [default],
    
        1:
          always horizontal,
    
        2:
          always perpendicular to the axis,
    
        3:
          always vertical.
    
        Also supported by mtext. Note that string/character rotation via argument srt to par does not affect the axis labels.
    

    That is why passing las=2 is the right answer.

    0 讨论(0)
提交回复
热议问题