Carolina Karoullas
Carolina Karoullas

Reputation: 406

Plot points from multiple series as one and keep order of initial dataframe in ggplot2

I have a dataset with multiple variables and wish to plot them on one graph as one series so that I can plot a "trendline" through the datapoints. However, it's important that the order is the same as the row names in the original dataframe.

I can plot the points as so:

d <- melt(phy.ordered, id.vars = "Species")

plot <- ggplot(d)+
  geom_point(aes(x = Species, y = value))+
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.2))+
  theme(axis.title.x = element_blank())+
  ylab("PC value")

However, the x-axis labels are reordered alphabetically. I know that usually, you would set "Species" as a factor to maintain the desired order in a ggplot similarly to the code below:

d$Species = factor(d$Species, levels=d[order(d$value), "Species"])

However, I get this error:

Error in levels<-(*tmp*, value = as.character(levels)) : factor level [14] is duplicated

I know this is because the species names have been duplicated through the melt() function but I'm not sure how to get around this.

Any ideas would be greatly appreciated!

Many thanks,

Carolina

Data for phy.ordered as below:

dput(phy.ordered)
structure(list(PC1 = c(0.103177778, 0.095766667, 0.137214286, 
0.0902, 0.167, -0.016138, -0.0027375, 0.066788889, -0.006506, 
0.002757, -0.028392, -0.05718, -0.045833333, -0.0487, -0.072, 
0.027344, 0.0806, 0.03305, -0.0943, 0.178333333, 0.0455, -0.08985, 
-0.15, -0.19, -0.128766667, 0.0292, -0.0435, -0.075, -0.03627, 
0.0501, -0.0094, 0.0447, 0.000533333, -0.0281, -0.029, 0.01537, 
-0.0793, -0.04655, -0.111, -0.0789, 0.08325, -0.007165, -0.0351, 
-0.068283333, 0.0277, -0.0984, 0.037333333, -0.113, -0.131, -0.2025, 
-0.188, -0.174, -0.13, -0.1671, -0.246, -0.0792, 0.043133333, 
0.01435, 0.0288, 0.0824, -0.12215, -0.0403, 0.0129, -0.118, -0.143533333, 
0.097855556, 0.194444444), PC2 = c(-0.040322222, -0.0412, -0.0495, 
-0.0479, 0.075, -0.04702, -0.02917375, -0.032052222, -0.02674, 
-0.026715, -0.026531, 0.10001, 0.093033333, -0.007813333, 0.0404, 
0.05916, 0.0794, 0.0957, -0.0558, -0.078333333, -0.0794, -0.05465, 
-0.07045, -0.0679, -0.020106667, -0.0216, 0.0247, -0.0375, 0.032366667, 
-0.035933333, -0.0508, -0.00662, 0.0136, -0.0209, -0.0577, -0.0202, 
-0.00904, 0.0216, 0.0259, -0.00829, 0.00585, 0.00020525, 0.01526, 
-0.048766667, 0.021, -0.033953333, -0.004156667, 0.00259, 0.0392, 
-0.0132495, 0.00545, 0.023, 0.016, 0.04956525, 0.0403, 0.023705, 
0.032523333, 0.00933, -0.0443, 0.0448, 0.0487, 0.0117, 0.053, 
-0.0192, -0.001199, 0.064275622, 0.041355556), PC3 = c(0.00168, 
0.023096667, -0.05385, -0.0315, 0.040333333, -0.02653, -0.00602125, 
-0.007182222, 0.028124, 0.000217, 0.0123781, -0.020345, -0.03525, 
-0.018033333, 0.00508, 0.02286, -0.00618, -0.002525, -0.0469, 
-0.006076, -0.0161, -0.00318, -0.0565, -0.0584, 0.00302, 0.0362, 
0.0406, -0.0208, 0.0415, 0.029166667, 0.0136, 0.04955, 0.015966667, 
0.0323, 0.017, 0.007575, -0.0397, -0.0159815, -0.0023, -0.0253, 
-0.03445, -0.036, -0.0295, 0.046866667, 0.0799, 0.051666667, 
0.106666667, 0.0179, 0.068533333, -0.02607, -0.019405, -0.0104, 
-0.0003, -0.014995, -0.0022, 0.03935, 0.023833333, 0.1075, 0.0776, 
0.114, 0.03585, 0.0244, -0.0264, 0.00289, -0.1151, 0.007373333, 
-0.060844444), PC4 = c(-0.001785556, -0.011816667, -0.018070857, 
-0.0234, 0.0435, 0.002221, 0.0214075, 0.003141111, 0.0001114, 
0.0206165, 0.018427, -0.0828, -0.082966667, -0.010013333, -0.0157, 
0.04328, 0.0495, 0.04315, -0.00971, -0.03555, -0.00704, -0.01385, 
0.00155, -0.000635, 0.01858, 0.00918, -0.0212, -0.0201, -0.000156667, 
-0.023066667, -0.0351, -0.02475, -0.011996667, -0.0292, 0.00208, 
-0.02375, 0.0258, 0.0002, 0.002205, 0.00793, -0.018225, -0.0070525, 
0.00972, -0.0085195, -0.00672, -0.011816667, -0.01003, 0.00715, 
-0.021766667, -0.004495, 0.0331, 0.0137, 0.02461, 0.0568, -0.000358, 
0.02466, 0.020743333, -0.02005, -0.0577, -0.0291, 0.04275, 0.0403, 
0.0273, -0.00841, 0.0076, 0.02054, 0.013664444), PC5 = c(0.00694, 
-0.016036667, -0.027458571, 0.0169, 0.014523333, 0.016687, 0.01161, 
0.024316667, -0.004624, -0.0088794, 0.003454, 0.002985, 0.002066667, 
-0.009193333, -0.00666, -0.04456, -0.0484, -0.03905, 0.0182, 
-0.026933333, 0.0111, 0.0195, 0.012075, 0.0318, -0.019, -0.019, 
-0.0441, 0.00338, -0.031586667, -0.029666667, -0.00253, -0.02985, 
-0.0334, -0.0264, -0.00638, -0.03255, -0.00583, -0.01131, -0.02065, 
-0.0194, -0.00838, -0.011855, -0.0306, 0.014996667, -0.0191, 
0.013256667, -0.01445, -0.0151, 0.012756667, 0.0336, 0.02775, 
0.043, 0.004785, -0.005602, 0.0484, 0.00844, -0.0222, 0.012165, 
-0.00214, 0.000961, 0.0137, 0.0058, -0.0552, 0.0107, -0.00038, 
0.030046667, 0.030291111), PC6 = c(0.006093333, -0.00318, 0.017762571, 
0.0161, -0.015833333, 0.0014685, -0.0017975, 0.009891111, 0.012803, 
0.0014199, 0.00312, 0.007694, -0.002874333, -0.0358, -0.0227, 
-0.03414, -0.0585, -0.03095, -0.0118, 0.021503333, -0.0018, -0.0158, 
-0.00828, -0.0109, -0.016133333, -0.0218, -0.0303, 0.000553, 
-0.020446667, -0.0251, -0.00564, -0.02485, -0.019573333, -0.00815, 
0.0135, -0.00041, -0.016, -0.007223, 0.00412, -0.0141, -0.0237, 
-0.0156, -0.02225, 0.023816667, -0.00815, 0.00822, -0.002072, 
-0.00447, 0.00175, -0.002625, -0.007925, 0.0256, 0.02065, 0.0211225, 
0.0262, 0.00665, 0.01939, 0.03755, 0.00259, 0.0426, 0.0426, 0.0171, 
-0.0434, -0.00834, -0.0366, 0.005523333, 0.007584444), PC7 = c(0.019536333, 
0.002223333, -0.00846, -0.0216, 0.015363333, -0.001878, 0.02206125, 
0.000753333, 0.0001688, 0.001592, -0.0001201, 0.011088, 0.010856667, 
0.009986667, -0.00116, -0.02292, 0.0000955, -0.02335, -0.015, 
-0.002966667, -0.00111, 0.0107, -0.00784, -0.0372, -0.015866667, 
-0.03, -0.0161, 0.0103, -0.01669, 0.01423, 0.00336, 0.010105, 
0.007366667, -0.0114, -0.000213, -0.00225, 0.035, 0.00489, 0.000085, 
0.0082, 0.006495, 0.0083225, 0.00716, -0.020678333, -0.00391, 
-0.017336667, -0.0242, -0.00151, 0.004376667, -0.00448, 0.0199, 
0.016, -0.007564, -0.0013775, -0.0142, 0.037, -0.00858, 0.00174, 
-0.00439, 0.0132, 0.00175, 0.0182, 0.00763, 0.0336, -0.023523333, 
-0.008303333, -0.009307778), PC8 = c(-0.005500333, 0.013733333, 
-0.01977, -0.0274, 0.012356667, -0.006477, 0.00912425, 0.015116889, 
0.014534, 0.010916, 0.01088, 0.0004592, 0.021876667, -0.003247067, 
-0.00592, -0.0094268, -0.0273, -0.01372, -0.00924, -0.021333333, 
0.0198, -0.00172, -0.000875, 0.00378, 0.003566667, 0.00211, -0.00806, 
-0.0135, -0.003136667, 0.00837, 0.0328, 0.004945, 0.012146667, 
0.0208, -0.0349, 0.0039255, -0.00837, 0.00319, 0.004035, 0.00172, 
-0.00875, 0.0015975, 0.006915, -0.011686667, -0.00588, -0.0192, 
-0.015333333, 0.00457, -0.00003, 0.005188, 0.0005485, 0.0151, 
0.01025, 0.000625, 0.00917, -0.02005, 0.003376667, -0.02625, 
-0.0369, -0.0275, -0.00338, 0.0112, 0.015, -0.0218, -0.022766667, 
0.000175556, 0.005126778), PC9 = c(-0.010337778, 0.0000156667, 
0.009385714, -0.0169, 0.008529333, -0.0041977, 0.0077425, -0.0000722222, 
0.005142, -0.003088, 0.0010387, 0.0054127, 0.000146667, 0.004686667, 
0.0211, 0.0046926, -0.00222, -0.0049, -0.000798, -0.009706667, 
0.00452, 0.00817, 0.01685, 0.0181, -0.00169, -0.0058, -0.00843, 
-0.0114, -0.00808, -0.004246667, 0.0156, 0.005555, -0.008983333, 
-0.0173, -0.0198, -0.00698, -0.00934, -0.01945, -0.013785, -0.0156, 
-0.01935, -0.0163275, -0.01415, 0.006148333, -0.00326, 0.009326667, 
-0.00494, -0.00681, 0.00136, 0.001652, 0.005445, -0.00154, 0.00851, 
0.009945, -0.00532, 0.008855, -0.005266667, 0.01376, 0.013, -0.0396, 
0.007825, 0.0214, -0.0111, 0.00385, -0.006283333, 0.00932, -0.001477778
), PC10 = c(-0.002013333, -0.000474333, -0.007381571, -0.00346, 
0.016733333, -0.001914, -0.006365375, -0.002538489, -0.007298, 
0.0005414, -0.0012003, -0.00008, -0.019166667, 0.019143333, 0.0131, 
0.00161, 0.00129, -0.00907, 0.000743, -0.016566667, 0.00236, 
0.01131, 0.01075, 0.0207, 0.005730333, 0.00325, 0.00986, 0.00918, 
0.003451333, 0.005816667, 0.0122, 0.0081, 0.01709, 0.0208, -0.00153, 
0.00316, -0.0109, 0.0016245, 0.00623, -0.00347, -0.019405, -0.00156, 
0.006855, 0.005935, -0.00976, 0.007986667, -0.002076667, -0.00558, 
-0.012733333, 0.0179, 0.005205, 0.00894, -0.0069, -0.0309, 0.0137, 
-0.001095, -0.008856667, 0.0084, 0.014, -0.00362, -0.00584, -0.0103, 
-0.0223, 0.00557, -0.005226667, 0.005820556, 0.007604444), PC11 = c(-0.001696778, 
0.001516333, 0.008685714, 0.00902, 0.01236, -0.001538, 0.00383325, 
-0.001554444, -0.0015082, 0.0071564, 0.010997, 0.006699, 0.016406667, 
-0.022466667, -0.0199, 0.004487, 0.0121, -0.0027085, -0.0132, 
-0.001876667, 0.0142, 0.00721, -0.00186, 0.00811, 0.00317, -0.0127, 
-0.00635, -0.00739, -0.002926667, -0.00243, 0.00432, -0.011785, 
0.001596667, -0.00629, 0.00633, -0.013565, -0.0166, -0.0138, 
-0.00957, -0.00549, -0.002685, -0.00872, -0.00974, 0.008774, 
-0.0142, 0.013653333, -0.00163, -0.0137, -0.010796667, -0.005205, 
-0.005035, -0.00695, -0.0116, -0.015395, -0.015, 0.0120185, 0.0128, 
-0.004774, -0.0217, -0.018, -0.00779, -0.002, -0.00118, 0.0135, 
0.0041804, 0.003305556, -0.010273333), Species = c("Alectoris_rufa", 
"Alectoris_graeca", "Perdix_perdix", "Perdix_dauurica", "Lagopus_lagopus", 
"Tadorna_tadorna", "Aix_sponsa", "Mergus_merganser", "Bucephala_islandica", 
"Anas_crecca", "Anas_clypeata", "Apus_apus", "Tachymarptis_melba", 
"Caprimulgus_europaeus", "Caprimulgus_climacurus", "Columba_livia", 
"Columba_palumbus", "Streptopelia_decaocto", "Fulica_atra", "Gallinula_chloropus", 
"Crex_crex", "Rallus_aquaticus", "Podiceps_cristatus", "Tachybaptus_ruficollis", 
"Vanellus_vanellus", "Charadrius_hiaticula", "Charadrius_dubius", 
"Haematopus_ostralegus", "Pluvialis_apricaria", "Scolopax_rusticola", 
"Tringa_ochropus", "Actitis_hypoleucos", "Calidris_alpina", "Philomachus_pugnax", 
"Lymnocryptes_minimus", "Numenius_arquata", "Larus_glaucoides", 
"Larus_argentatus", "Larus_marinus", "Larus_canus", "Larus_ridibundus", 
"Rissa_tridactyla", "Chlidonias_leucopterus", "Uria_aalge", "Alle_alle", 
"Alca_torda", "Fratercula_arctica", "Catharacta_skua", "Fulmarus_glacialis", 
"Buteo_buteo", "Milvus_migrans", "Circus_cyaneus", "Accipiter_gentilis", 
"Accipiter_nisus", "Aquila_chrysaetos", "Upupa_epops", "Alcedo_atthis", 
"Picus_viridis", "Dendrocopos_minor", "Dendrocopos_major", "Falco_peregrinus", 
"Falco_columbarius", "Amazona_aestiva", "Gavia_stellata", "Phalacrocorax_carbo", 
"Hirundo_rustica", "Delichon_urbicum")), row.names = c("Alectoris_rufa", 
"Alectoris_graeca", "Perdix_perdix", "Perdix_dauurica", "Lagopus_lagopus", 
"Tadorna_tadorna", "Aix_sponsa", "Mergus_merganser", "Bucephala_islandica", 
"Anas_crecca", "Anas_clypeata", "Apus_apus", "Tachymarptis_melba", 
"Caprimulgus_europaeus", "Caprimulgus_climacurus", "Columba_livia", 
"Columba_palumbus", "Streptopelia_decaocto", "Fulica_atra", "Gallinula_chloropus", 
"Crex_crex", "Rallus_aquaticus", "Podiceps_cristatus", "Tachybaptus_ruficollis", 
"Vanellus_vanellus", "Charadrius_hiaticula", "Charadrius_dubius", 
"Haematopus_ostralegus", "Pluvialis_apricaria", "Scolopax_rusticola", 
"Tringa_ochropus", "Actitis_hypoleucos", "Calidris_alpina", "Philomachus_pugnax", 
"Lymnocryptes_minimus", "Numenius_arquata", "Larus_glaucoides", 
"Larus_argentatus", "Larus_marinus", "Larus_canus", "Larus_ridibundus", 
"Rissa_tridactyla", "Chlidonias_leucopterus", "Uria_aalge", "Alle_alle", 
"Alca_torda", "Fratercula_arctica", "Catharacta_skua", "Fulmarus_glacialis", 
"Buteo_buteo", "Milvus_migrans", "Circus_cyaneus", "Accipiter_gentilis", 
"Accipiter_nisus", "Aquila_chrysaetos", "Upupa_epops", "Alcedo_atthis", 
"Picus_viridis", "Dendrocopos_minor", "Dendrocopos_major", "Falco_peregrinus", 
"Falco_columbarius", "Amazona_aestiva", "Gavia_stellata", "Phalacrocorax_carbo", 
"Hirundo_rustica", "Delichon_urbicum"), class = "data.frame")

Upvotes: 2

Views: 35

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 388982

To maintain the same order as rownames of the orignal dataframe you can do -

d$Species <- factor(d$Species, unique(rownames(phy.ordered)))
#Or using the `Species` column
#d$Species <- factor(d$Species, unique(phy.ordered$Species))

Then plot as usual -

library(ggplot2)

ggplot(d)+
  geom_point(aes(x = Species, y = value))+
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.2))+
  theme(axis.title.x = element_blank())+
  ylab("PC value")

Upvotes: 1

Related Questions