Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
3 views
in R Programming by (5.3k points)
edited by

I'm plotting lines with ggplot2 like this:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw()

current plot

I find legend marks to be small so I want them to be bigger. If I change the size, lines on the plot change too:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line(size=4) + theme_bw()

thick plot lines

But I only want to see thick lines in the legend, I want lines on the plot to be thin. I tried to use legend.key.size but it changes the square of the mark, not the width of the line:

library(grid)  # for unit

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw() + theme(legend.key.size=unit(1,"cm"))

big legend keys

I also tried to use points:

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + geom_point(size=4) + theme_bw()

But of course it still affects both plot and legend:

points

I wanted to use lines for the plot and dots/points for the legend.

So I'm asking about two things:

How to change the width of the line in the legend without changing the plot?

How to draw lines in the plot, but draw points/dots/squares in the legend?

2 Answers

0 votes
by

You can use the color argument of the guides function as follows:

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+

  guides(colour = guide_legend(override.aes = list(size=3)))

Output:

image

To get points in legend and lines in plot add geom_point(size=0) to make the points invisible and then in guides() set linetype=0 to remove lines and size=3 to get larger points.i.e.,

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+

  geom_point(size=0)+

  guides(colour = guide_legend(override.aes = list(size=3,linetype=0)))

Output:

image

0 votes
by (1.9k points)
To change the line width in the legend without changing the plot lines can be done by modifying the guide_length() function. By setting up the override.aes which only changes the line size in the legend.

Code:

library(ggplot2)

ggplot(iris, aes(Petal.Width, Petal.Length, color=Species)) +

  geom_line(size=1) +  

  theme_bw() +

  theme(legend.key.size = unit(1, "cm")) +

  guides(color = guide_legend(override.aes = list(size = 4)))

1.4k questions

32.9k answers

507 comments

693 users

...