Crystal
Crystal

Reputation: 11

Changing the size of a categorical label font in R

I'm trying to make a barplot on R that has a categorical label, not a number scale, as the x-axis. I then need to knit the RMarkdown file as a pdf. This is what it looks like before I knit it as a RMD:

enter image description here

This is what it looks like after I knit it as an RMD:

enter image description here

This is the code for the plot:

barplot(t1,
        legend = TRUE, 
        main="Commitment to Conserving Water vs. Age of Voice 
        and Familiarity of Imagery", 
        xlab = "Voice - Familiarity Level", 
        ylab = "Number of Participants",
        ylim = c(0,40), 
        beside = TRUE)

As you can see in the images, hopefully, I lose some of the labels on the x-axis when I knit into RMD. I think this is because the x labels are too long, so R is just cutting every other one out to make the graph look neater. I either need a way to prevent R from doing this, or to make the x labels smaller.

This is a school assignment where I can't use ggplot2 or anything like that; I have to do this in base R. I tried using cex.axis, but for some reason it would only change the size of the y axis font and not the x axis font, which might be because there's not really an axis for x. I also tried looking into rotating the x axis labels, if I can't make it smaller, but I couldn't find out how to do that in base R.

Upvotes: 1

Views: 571

Answers (2)

Eva
Eva

Reputation: 851

You are knitting it into R Markdown document. Have a look at the code chunk, which contains this code. I think currently it looks like

{r}
barplot(t1,
        legend = TRUE, 
        main="Commitment to Conserving Water vs. Age of Voice 
        and Familiarity of Imagery", 
        xlab = "Voice - Familiarity Level", 
        ylab = "Number of Participants",
        ylim = c(0,40), 
        beside = TRUE)

Change the first line only.

{r fig.width=7}
barplot(t1,
        legend = TRUE, 
        main="Commitment to Conserving Water vs. Age of Voice 
        and Familiarity of Imagery", 
        xlab = "Voice - Familiarity Level", 
        ylab = "Number of Participants",
        ylim = c(0,40), 
        beside = TRUE)

You can experiment with different fig.width number to see how it looks like in the final document.

Upvotes: 0

jay.sf
jay.sf

Reputation: 72901

As already stated in comments, just play around with fig.width=, fig.height= chunk parameters. I chose a 6:4 ratio because it's standard in some journals.

---
output: pdf_document
---

```{r, echo=FALSE, fig.width=7, fig.height=4.67}

## simulate some data
set.seed(580509)
t1 <- replicate(10, runif(5, 0, 40)) |> `dimnames<-`(list(1:5, outer(c('AV', 'CV'), 0:4, paste)))

## plot
barplot(t1,
        legend=TRUE, 
        main="Commitment to Conserving Water vs. Age of Voice 
        and Familiarity of Imagery", 
        xlab="Voice - Familiarity Level", 
        ylab="Number of Participants",
        ylim=c(0, 40),
        beside=TRUE)
```

enter image description here

To change font size of "x-axis" you want to use the cex.names= argument. This is also possible for the legend; using the args.legend= argument you may specify all arguments of the ?legend function.

## sim. data
set.seed(580509)
t1 <- replicate(10, runif(5, 0, 40)) |> `dimnames<-`(list(1:5, outer(c('AV', 'CV'), 0:4, paste)))

barplot(t1, legend=TRUE, ylim=c(0, 40), beside=TRUE, 
        cex.names=.8,
        args.legend=list(x='topleft', cex=.8, title='levels')
        )

enter image description here

Study the help ?barplot carefully; it is really a powerful function, great your lecturer teaches it! It is IMO superior to ggplot, because it is able to directly process matrices, looks more professional, and is more intuitive.

Upvotes: 1

Related Questions