0

Currently I want to do a plot in ggplot where the size of the line and the color changes according to the geom_smooth done. I've been trying to add this in the geom_smooth aes option but it displays me two legends: one for the color and one for the size of the line. Can you help me with this?

ggplot(data = subset(data.est,!(l %in% c(1,2))),
      aes(x = sim, y = Error, color = factor(l), size = factor(l))) +
   geom_smooth(method = 'loess',formula = y ~ x, se = F) +  
  geom_hline(yintercept = 0,col = 'black') +
  labs(color = "Needle length", x = "Number of simulations" , y = "Squared error") +
  scale_color_manual(values =  
    c('red','red','red','darkred','red','red','red','red','red')) + 
  scale_alpha_manual(values = seq(0.1,1,length.out = 9)) + 
  scale_color_brewer(type = 'div',direction = -1, palette = 'BrBG') + 
  xlim(500,1000)

structure(list(l = c(1L, 11L, 10L, 9L, 2L, 11L, 7L, 3L, 10L, 
4L, 10L, 5L, 6L, 8L, 9L, 9L, 11L, 2L, 7L, 2L, 2L, 1L, 3L, 10L, 
5L, 3L, 6L, 8L, 10L, 10L, 11L, 11L, 8L, 1L, 9L, 4L, 8L, 1L, 2L, 
5L, 7L, 11L, 2L, 6L, 3L, 8L, 7L, 6L, 11L, 8L, 4L, 6L, 1L, 4L, 
1L, 3L, 10L, 2L, 1L, 1L, 4L, 2L, 9L, 1L, 8L, 3L, 1L, 4L, 3L, 
11L, 9L, 9L, 10L, 5L, 10L, 1L, 8L, 1L, 5L, 1L, 10L, 3L, 5L, 7L, 
5L, 4L, 6L, 3L, 9L, 5L, 4L, 11L, 5L, 11L, 10L, 8L, 7L, 3L, 3L, 
4L), sim = c(107L, 829L, 932L, 513L, 507L, 330L, 930L, 135L, 
394L, 654L, 718L, 652L, 983L, 616L, 500L, 990L, 549L, 396L, 463L, 
822L, 325L, 931L, 589L, 270L, 565L, 506L, 447L, 430L, 747L, 414L, 
424L, 220L, 954L, 618L, 171L, 947L, 323L, 197L, 480L, 402L, 692L, 
932L, 815L, 663L, 329L, 521L, 415L, 668L, 847L, 927L, 337L, 33L, 
322L, 449L, 955L, 922L, 827L, 998L, 971L, 508L, 613L, 550L, 772L, 
275L, 632L, 85L, 155L, 170L, 953L, 485L, 374L, 854L, 261L, 42L, 
428L, 131L, 597L, 338L, 329L, 180L, 476L, 678L, 624L, 714L, 910L, 
360L, 800L, 49L, 68L, 223L, 524L, 925L, 527L, 491L, 441L, 780L, 
764L, 551L, 436L, 349L), Error = c(0.0101670093068795, 0.0333634451103134, 
0.00110520504147119, 0.028301531087948, 0.000298800647667255, 
0.0635776657638243, 0.00663599930005768, 1.47196599261218, 0.256391067242013, 
0.038277634211877, 0.0177993359544238, 0.00296713793566502, 0.00249657996732793, 
0.000844461474275876, 0.0480599904421951, 0.002899124518668, 
0.0858530902932876, 0.0590600477951372, 0.0190356018221132, 0.0581404919987103, 
0.281667678212426, 0.053636592440469, 0.0278373137029251, 0.00630124778723973, 
0.00114121491039577, 0.0351017891695027, 0.000708096101754807, 
0.00215314776811059, 0.134540995133445, 0.14173321282681, 0.143490357497459, 
0.00354219603061888, 0.0130854224685769, 0.000415366099997319, 
0.192314026136183, 0.00383382099588482, 0.000282149419654538, 
0.503381577333123, 0.287905504025059, 0.0367644882685149, 0.0687261770900463, 
2.13743806184716e-05, 0.00296869998059188, 0.000532924183125649, 
0.0220247404685192, 0.00641189675448479, 0.0321901760394775, 
2.96199229171648e-05, 0.00155015921826204, 0.0848423674016669, 
0.205276061325583, 0.0739989260447227, 0.0579325198124508, 0.0428291844070546, 
0.0438000184287992, 0.00615749852654801, 0.0591407415396722, 
0.00106004847789361, 0.000999189621100586, 0.00394443973791914, 
0.0218145986793207, 0.0106595516078209, 0.0459275847313977, 0.147493152075202, 
0.186223913430443, 0.0443347433037691, 2.41919774707321, 0.00931274881623056, 
0.000289084654480865, 0.0176630565524408, 0.000940778203425078, 
0.25244328472803, 0.196366861971049, 0.00962643405885916, 0.050162785770824, 
0.247303545642654, 0.0156407722998984, 0.143823493172342, 0.0261210883420279, 
0.283979214118036, 0.0475375375754916, 0.000709244540739497, 
0.000773963444577904, 0.0441217545092607, 0.00199646827474003, 
0.0284772962285157, 0.000202375856502037, 1.72384505753732, 0.0560095299611507, 
0.000336478631196564, 0.000508278582507821, 0.0453971717148919, 
0.000725518099728713, 0.00333759994051756, 0.169116880951135, 
0.125565021090312, 0.00054035813261054, 0.00212401485152619, 
0.0382776342118771, 0.0530786410214522)), row.names = c(98L, 
10830L, 9932L, 8512L, 1499L, 10331L, 6927L, 2128L, 9394L, 3648L, 
9718L, 4647L, 5979L, 7614L, 8499L, 8989L, 10550L, 1388L, 6460L, 
1814L, 1317L, 922L, 2582L, 9270L, 4560L, 2499L, 5443L, 7428L, 
9747L, 9414L, 10425L, 10221L, 7952L, 609L, 8170L, 3941L, 7321L, 
188L, 1472L, 4397L, 6689L, 10933L, 1807L, 5659L, 2322L, 7519L, 
6412L, 5664L, 10848L, 7925L, 3331L, 5029L, 313L, 3443L, 946L, 
2915L, 9827L, 1990L, 962L, 499L, 3607L, 1542L, 8771L, 266L, 7630L, 
2078L, 146L, 3164L, 2946L, 10486L, 8373L, 8853L, 9261L, 4037L, 
9428L, 122L, 7595L, 329L, 4324L, 171L, 9476L, 2671L, 4619L, 6711L, 
4905L, 3354L, 5796L, 2042L, 8067L, 4218L, 3518L, 10926L, 4522L, 
10492L, 9441L, 7778L, 6761L, 2544L, 2429L, 3343L), class = "data.frame")

This is how my sample looks like. The factor l is an integer from 1 to 11, but in ggplot I just want from l>3

9
  • Please share a little bit of data, preferably using dput so it is copy/pasteable. Also be clearer about what you want - currently you have 2 legends, color and size. How many legends do you want? Based on your title and text, I assumed I would see multiple geom_smooth layers, maybe one with lm and one with loess, but I only see one... Commented Dec 10, 2019 at 3:21
  • Done. What I want is just one legend with with the size of the line and the color. All the geom_smooth should be with loess. Commented Dec 10, 2019 at 3:49
  • The data you shared has column names V1, V2, ... Could you make them match your code? I'm guessing V3 is the factor column, but it only has one value. You may need to pick a more representative subset of data to share so that there are at least 2 lines. Commented Dec 10, 2019 at 4:00
  • Yes, I have an error about the object l not defined. What is l ? Commented Dec 10, 2019 at 4:01
  • 1
    Your data and code have completely different variable names, please correct them. Commented Dec 10, 2019 at 4:35

1 Answer 1

1
ggplot(data = subset(data.est,!(l %in% c(1,2))),
      aes(x = sim, y = Error, color = factor(l), size = factor(l))) +
   geom_smooth(method = 'loess',formula = y ~ x, se = F) +  
  geom_hline(yintercept = 0,col = 'black') +
  labs(x = "Number of simulations" , y = "Squared error") +
  # can only have one color scale
  # scale_color_manual(values = c('red','red','red','darkred','red','red','red','red','red')) + 
  guides(color = guide_legend(title = "Needle length"), size = guide_legend(title = "Needle length")) +
  # alpha not used
  #scale_alpha_manual(values = seq(0.1,1,length.out = 9)) + 
  scale_color_brewer(type = 'div',direction = -1, palette = 'BrBG') + 
  xlim(500,1000)

The legends won't be combined if you only name one of them. If you give them the same name (name both or neither), they will be combined.

t

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you so much! This worked perfectly. Thank you Gregor!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.