Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I manually change the key labels in a legend in ggplot2

Tags:

r

key

label

ggplot2

I am preparing a plot for publication. I created a stacked box plot to show frequency of patients in each group who were some complicated accumulation of seronegatives versus not. The legend is using the labels from the data frame which are appropriate for us who are working on the project but no for publication. I want to change the names to something more rapidly understood by the reader.

So for instance run the following script

grp <- gl(n=4,k=20,labels=c("group a","group b","group c", "group d")) value <- runif(n=80, min=10, max=150) outcome <- cut(value,2) data <- data.frame(grp,value,outcome) ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group")               +ylab("number of subjects") + labs(fill="Serologic response") 

That code creates key labels "(10.4,80]" and "(80,150]" which are not suitable for publication. Instead I would want "double negative" and "positive for a and/or b".

I guess I could go back to the dataframe and transform to get a new variable with the correct labeling. Or I could just relabel my factor? However, I would prefer to do it at the time of plotting.

like image 813
Farrel Avatar asked Sep 06 '11 16:09

Farrel


People also ask

How do I change labels in legend?

Select your chart in Excel, and click Design > Select Data. Click on the legend name you want to change in the Select Data Source dialog box, and click Edit. Note: You can update Legend Entries and Axis Label names from this view, and multiple Edit options might be available.

How do I change the legend text in ggplot2?

You can use the following syntax to change the legend labels in ggplot2: p + scale_fill_discrete(labels=c('label1', 'label2', 'label3', ...))

How do I change my legend name in ggplot2?

Method 1: Change Legend Title using guides() Function. Now if we want to change Legend Title then we have to add guides and guide_legend functions to the geom_point function. Inside guides() function, we take parameter named 'color' because we use color parameter for legend in ggplot() function.


Video Answer


2 Answers

The standard way is to use the scale functions to change the displayed labels for groups. You can replace your ggplot call with

ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group") +   ylab("number of subjects") +    scale_fill_discrete("Serologic response",                        breaks=c("(10.1,79.9]","(79.9,150]"),                        labels=c("double negative", "positive for a and/or b")) 

Note that the scale's title has been incorporated into the scale_fill_discrete call. You can do this with the axes too, if you like

ggplot(data, aes(grp, fill=outcome)) + geom_bar() +   scale_x_discrete("group") +   scale_y_continuous("number of subjects") +    scale_fill_discrete("Serologic response",                        breaks=c("(10.1,79.9]","(79.9,150]"),                        labels=c("double negative", "positive for a and/or b")) 
like image 181
Brian Diggs Avatar answered Oct 07 '22 15:10

Brian Diggs


I found a hybrid way of doing it. It does relabel the factor but I do not have to do it in the dataframe. Instead I just do it in the ggplot command.

ggplot(data, aes(grp, fill=factor(outcome,labels=c("low","high")))) +    geom_bar() +xlab("group") +ylab("number of subjects") +    labs(fill="Serologic response") 

Are there any other ways?

like image 22
Farrel Avatar answered Oct 07 '22 13:10

Farrel