X axis does not match barplot

前端 未结 2 524
温柔的废话
温柔的废话 2020-12-30 13:33

I used barplot() function to create a stacked chart from matrix.

Matrix looks like this:

1 0.989013 0.010987
2 0.999990 0.000010
3 0.999990 0.000010         


        
相关标签:
2条回答
  • 2020-12-30 14:19

    The problem with axis labels is in fact that bars are not centered on whole numbers. For example, make some data with ten rows and plot them with barplot(). Then add axis() for x axis at numbers from 1 to 10.

    set.seed(1)
    x<-data.frame(v1=rnorm(10),v2=rnorm(10))
    barplot(t(as.matrix(x)), col=c("cyan", "black"))
    axis(1,at=1:10)
    

    enter image description here

    Now axis texts are not in right position.

    To correct this problem, barplot() should be saved as object and this object should be used as at= values in axis.

    m<-barplot(t(as.matrix(x)), col=c("cyan", "black"))
    m
     [1]  0.7  1.9  3.1  4.3  5.5  6.7  7.9  9.1 10.3 11.5
    axis(1, at=m,labels=1:10)
    

    enter image description here

    EDIT - plotting only some ticks

    If only some of axis ticks texts should be plotted then you can subset m values that are needed and provided the same length of labels=. In this example only 1., 5. and 10. bars are annotated.

    m<-barplot(t(as.matrix(x)), col=c("cyan", "black"))
    lab<-c("A","B","C")
    axis(1, at=m[c(1,5,10)],labels=lab)
    

    enter image description here

    0 讨论(0)
  • 2020-12-30 14:19

    Look at the updateusr function in the TeachingDemos package. This function will change or "update" the user coordinates of a plot. The example shows changing the coordinates of the x axis of a barplot to match the intuitive values for additional plotting.

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