Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

connected scatter plot by 2 groups

I have the following data set:

df2.summ <- structure(list(Species = c("Large meso-predator", "Large meso-predator", 
"Large meso-predator", "Large meso-predator", "Large meso-predator", 
"Large meso-predator", "Large meso-predator", "Large meso-predator", 
"Large meso-predator", "Large meso-predator", "Large meso-predator", 
"Large meso-predator", "Large meso-predator", "Large meso-predator", 
"Large meso-predator", "Large meso-predator", "Large meso-predator", 
"Large meso-predator", "Apex predator", "Apex predator", "Apex predator", 
"Apex predator", "Apex predator", "Apex predator", "Apex predator", 
"Apex predator", "Apex predator", "Apex predator", "Apex predator", 
"Apex predator"), Habitat = c("lagoon", "lagoon", "lagoon", "lagoon", 
"lagoon", "lagoon", "bank", "bank", "bank", "bank", "bank", "bank", 
"pelagic", "pelagic", "pelagic", "pelagic", "pelagic", "pelagic", 
"bank", "bank", "bank", "bank", "bank", "bank", "pelagic", "pelagic", 
"pelagic", "pelagic", "pelagic", "pelagic"), detect_dist = c(1.5, 
2, 2.5, 3, 3.5, 4, 1.5, 2, 2.5, 3, 3.5, 4, 1.5, 2, 2.5, 3, 3.5, 
4, 1.5, 2, 2.5, 3, 3.5, 4, 1.5, 2, 2.5, 3, 3.5, 4), avg = c(37.4509803921569, 
37.1960784313725, 37.8235294117647, 37.3725490196078, 37.0980392156863, 
38.2156862745098, 27.3137254901961, 29.6862745098039, 28.6274509803922, 
28.5098039215686, 28.2941176470588, 27.3921568627451, 35.2352941176471, 
33.078431372549, 33.5490196078431, 34.0392156862745, 34.5686274509804, 
34.3725490196078, 7.19607843137255, 7.05882352941176, 7.33333333333333, 
7.23529411764706, 7.37254901960784, 7.35294117647059, 2.47058823529412, 
2.6078431372549, 2.49019607843137, 2.45098039215686, 2.2156862745098, 
2.37254901960784), sd = c(4.49583685420277, 6.23544579911697, 
4.68062338734037, 4.74957170411702, 4.5618193824867, 4.90841614164975, 
4.81036462683831, 5.84975280188294, 3.64944261121462, 5.04131946624932, 
4.02638357659604, 5.1926040918697, 4.47923312764191, 5.50579017854804, 
4.8303777305308, 4.84545471267135, 4.36923289359029, 4.64310578950653, 
1.45629128738913, 1.50215531428521, 1.25962957517941, 1.49115036524313, 
1.45548320929821, 1.29342227306885, 1.34689184683063, 1.45709891733607, 
1.22266183418978, 1.3610837665654, 1.4044746418529, 1.2800122548433
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-30L))

which looks like this:

# A tibble: 30 × 5
   Species             Habitat detect_dist   avg    sd
   <chr>               <chr>         <dbl> <dbl> <dbl>
 1 Large meso-predator lagoon          1.5  37.5  4.50
 2 Large meso-predator lagoon          2    37.2  6.24
 3 Large meso-predator lagoon          2.5  37.8  4.68
 4 Large meso-predator lagoon          3    37.4  4.75
 5 Large meso-predator lagoon          3.5  37.1  4.56
 6 Large meso-predator lagoon          4    38.2  4.91
 7 Large meso-predator bank            1.5  27.3  4.81
 8 Large meso-predator bank            2    29.7  5.85
 9 Large meso-predator bank            2.5  28.6  3.65
10 Large meso-predator bank            3    28.5  5.04
# … with 20 more rows

I would like to draw a connected scatter plot, connecting data points within each habitat-species combination only, but i cannot get this to work. Whatever parameters I choose for the geom_line() or even geom_path() function, i get different combinations of connections that connect among species-habitat combinations.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Here is the code of a grouped scatter plot:

ggplot(df2.summ, aes(x = detect_dist, y = avg, group = Habitat)) +
  geom_point(aes(color = Habitat, shape = Species), size = 2) +
  geom_errorbar(aes(ymin = avg - sd, ymax = avg + sd, color = Habitat), size = .5, width=.01) +
  scale_color_manual(values = hab.col2) +
  xlab('Threat detection distance') + ylab('Abundance') +
  theme_bw() +
  theme(text = element_text(size = 12, family = "Times"))

Here is one of the codes that doesn’t yield the desired result:

ggplot(df2.summ, aes(x = detect_dist, y = avg, group = Habitat)) +
  geom_point(aes(color = Habitat, shape = Species), size = 2) +
  geom_path(aes(color = Habitat, group = Habitat)) +
  geom_errorbar(aes(ymin = avg - sd, ymax = avg + sd, color = Habitat), size = .5, width=.01) +
  scale_color_manual(values = hab.col2) +
  xlab('Threat detection distance') + ylab('Abundance') +
  theme_bw() +
  theme(text = element_text(size = 12, family = "Times"))

Any help is greatly appreciated.

>Solution :

After little adaptions of your code, we could do it this way:

library(ggplot2)

ggplot(df2.summ , aes(x = detect_dist, y = avg, color=Habitat, shape = Species)) +
  geom_point(size = 2) +
  geom_errorbar(aes(ymin = avg - sd, ymax = avg + sd, color = Habitat), size = .5, width=.01) +
  geom_line()+
 # scale_color_manual(values = hab.col2) +
  xlab('Threat detection distance') + ylab('Abundance') +
  theme_bw() +
  theme(text = element_text(size = 12, family = "Times"))

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading