Reputation: 2683
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
4 0.999990 0.000010
code to create a stacked chart looks like this:
barplot(t(as.matrix(x)), col=c("cyan", "black"))
The problem is that I want to create custom x axis with ticks and labels at certain points. I used following to create x axis:
axis(1, at=keyindexes, labels=unique(t$V4), tck=-0.01)
where keyindexes is vector of bar numbers where I need to have ticks and unique(t$V4) is vector containing unique name for each tick.
Now the problem is that x axis does not match with chart area and is significantly shorter. Can anyone advice on how to make x axis longer?
Upvotes: 7
Views: 11760
Reputation: 49640
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.
Upvotes: 0
Reputation: 98429
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)
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)
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)
Upvotes: 19