Home > Blockchain >  Color shape legend in black ggplot2
Color shape legend in black ggplot2

Time:11-27

I am struggling to get the final bit of thing I need to complete one plot.

This is the tale:

UMAP1   UMAP2   color   tissue  shape
BR1.RPM.    24.4555644927102    8.33081550406305    darkgrey    Brain   21
BR2.RPM.    24.6344541391525    4.82860000294483    darkgrey    Brain   21
BR3.RPM.    21.3411330596164    6.82626266175396    darkgrey    Brain   21
BR4.RPM.    25.2706589831506    6.12795744057223    darkgrey    Brain   21
BR5.RPM.    22.7412144591854    2.79845872023771    darkgrey    Brain   21
HE1.RPM.    4.93012565944078    -19.2942174526575   plum    Heart   21
HE2.RPM.    2.99869262617741    -20.9994250048535   plum    Heart   21
HE3.RPM.    1.07403447412913    -19.6200772829839   plum    Heart   21
HE4.RPM.    5.05658841417385    -16.4676995230271   plum    Heart   21
HE5.RPM.    1.38979293698651    -23.1667225134936   plum    Heart   21
KI1.RPM.    -18.8116579138644   -0.00462977244554885    darkolivegreen4Kidney   21
KI2.RPM.    -20.432681992004    -0.915727298879803  darkolivegreen4Kidney   21
KI3.RPM.    -18.030857579405    -1.88453627174062   darkolivegreen4Kidney   21
KI4.RPM.    -17.8739263530499   -4.03002130738062   darkolivegreen4Kidney   21
KI5.RPM.    -20.1634636202346   -3.6263638737022    darkolivegreen4Kidney   21
LI1.RPM.    -11.4770920275156   16.2842167192584    yellow3 Liver   21
LI2.RPM.    -14.2305178863485   14.8920278578934    yellow3 Liver   21
LI3.RPM.    -13.0721198535928   19.2812569438666    yellow3 Liver   21
LI4.RPM.    -16.5863672861391   16.7787928871763    yellow3 Liver   21
LI5.RPM.    -13.5477499873499   17.07104133669  yellow3 Liver   21
LU1.RPM.    -2.92494582302321   -3.99929775102582   mediumpurple    Lung    21
LU2.RPM.    -4.55004758488599   -1.10444902760826   mediumpurple    Lung    21
LU3.RPM.    -2.21046905247079   -0.543716793747593  mediumpurple    Lung    21
LU4.RPM.    -0.171714494316746  -2.80912609668774   mediumpurple    Lung    21
LU5.RPM.    0.138361668949329   1.33912348982787    mediumpurple    Lung    21
PA1.RPM.    2.40256627188632    20.972474918705 dodgerblue  Pancrea21
PA2.RPM.    3.07832860321791    18.7632129867164    dodgerblue  Pancreas    21
PA3.RPM.    4.64721910111144    20.240083817214 dodgerblue  Pancrea21
PA5.RPM.    4.08614060978053    22.523507524782 dodgerblue  Pancrea21
SKI.RPM.    -6.50616313409082   -22.5987512552561   #F0C57F Skin    21
SM1.RPM.    -3.18280536469006   -22.5368142358323   #BC4524 Skeletal muscle 21
SM2.RPM.    -4.5943110200305    -20.1688133359027   #BC4524 Skeletal muscle 21
SM3.RPM.    -7.30641518202577   -20.0859051130635   #BC4524 Skeletal muscle 21
TE1.RPM.    7.80910486885204    -14.23430686181 lavenderblush2  Testis  21
TE2.RPM.    4.90001913797227    -10.4702885523713   lavenderblush2  Testis  21
TE3.RPM.    3.09328325061247    -12.8659248177456   lavenderblush2  Testis  21
Brain_Sha   20.9386190008756    4.15082143059336    darkgrey    Brain   24
Heart_Sha   -4.64687807513027   -17.0889913553132   plum    Heart   24
Kidney_Sha  -6.12575586753639   17.0038176223978    darkolivegreen4Kidney   24
Liver_Sha   -16.0289300026197   18.9145544776388    yellow3 Liver   24
Pancreas_Sha    -0.584268732931413  18.7479385055046    dodgerblue  Pancreas    24
Skin_Sha    2.76066649656992    0.0628225671099258  #F0C57F Skin    24
Brain_Mdo   21.5843973523696    9.8934422431328 darkgrey    Brain   25
Cerebellum_Mdo  18.5294231342495    5.18064808162601    darkgrey    Brain   25
Heart_Mdo   -2.23047530413099   -14.3377907628058   plum    Heart   25
Kidney_Mdo  -9.39418037560359   14.1691863077575    darkolivegreen4Kidney   25
Testis_Mdo  6.82340577182029    -12.3274677871282   lavenderblush2  Testis  25
Tcy_muscle  0.159978911767435   -15.6754517794312   #BC4524 Skeletal muscle 23
Tcy_skin    1.61794178327545    10.0875748984971    #F0C57F Skin    23

And this is the code I use:

UMAP$color = factor(UMAP$color, levels=c("darkgrey", "mediumpurple", "dodgerblue", "yellow3", "darkolivegreen4",
                                          "lavenderblush2", "plum", "#BC4524", "#F0C57F"))

UMAP$tissue = factor(UMAP$tissue, levels=c("Brain", "Lung", "Pancreas", "Liver", "Kidney", "Testis", "Heart",
                                            "Skeletal muscle", "Skin"))

UMAP$shape = factor(UMAP$shape, levels=c(21,24,25,23))




UMAP_plot = ggplot(UMAP, aes(x=-UMAP1, y=-UMAP2, fill=color, shape=shape))   
  geom_point(size=3.5)   
  scale_fill_manual(labels = c("Brain", "Lung", "Pancreas", "Liver","Kidney", "Testis", "Heart",
                               "Skeletal muscle", "Skin"),
                    values = c("darkgrey", "mediumpurple", "dodgerblue", "yellow3", "darkolivegreen4",
                               "lavenderblush2", "plum", "#BC4524", "#F0C57F"))  
  scale_shape_manual(labels = c("Dg","Td", "Op", "Ty"),
                     values = c(21, 24, 25, 23))  
  guides(fill = guide_legend(ncol=2))  
  ylim(c(-26,26))   xlim(c(-26,26))  
  xlab("UMAP 1")   ylab("UMAP 2")  
  scale_y_continuous(limits = c(-26, 26), breaks = seq(-26, 26, 10))  
  scale_x_continuous(limits = c(-26, 24), breaks = seq(-26, 24, 10))  
  theme_bw()  
  theme(legend.position = "right", legend.title = element_blank(), legend.text = element_text(size=10),
        legend.justification ="top")  
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())  
  theme(axis.text.x = element_text(size=8),
        axis.text.y = element_text(size=8),
        axis.title.x =element_text(size=10, margin = margin(t = 5)),
        axis.title.y =element_text(size=10, margin = margin(r = 5)),
        plot.margin = margin(t=0.25, b=0.25, l=0.25, r=0.25, "cm"))  
  theme(legend.key.size = unit(1, 'lines'))   
  theme(panel.border = element_rect(linetype = "solid", size=1, color="black"))  
  guides(fill = guide_legend(override.aes =list(shape = 21), nrow=10))  
  theme(legend.spacing.y = unit(0,"lines"),
        legend.margin = margin(0,0,0,0))

Which generates the following plot:

enter image description here

I would like to put the shape legend in black color, not as it is now with void shapes. I have tried several ways to add the color to that legend specifically but I always end up putting all the dots in black...

Is there a way to manually set black color for only the scale_shape_manual option?

Is there an alternative code to generate the desired plot maybe??

Many thanks

CodePudding user response:

You can add fill = "black" to the override.aes of the shape guide. As a little tip, keeping your code organised into logical sections while minimizing duplicated calls really helps to focus debugging.

ggplot(UMAP, aes(-UMAP1, -UMAP2, fill = color, shape = shape))   
  geom_point(size = 3.5)   
  scale_fill_manual(labels = levels(UMAP$tissue),
                    values = levels(UMAP$color),
                    guide  = guide_legend(override.aes = list(shape = 21), 
                                          nrow = 10))  
  scale_shape_manual(labels = c("Dg","Td", "Op", "Ty"),
                     values = c(21, 24, 25, 23),
                     guide = guide_legend(override.aes =list(fill = "black")))  
  scale_y_continuous("UMAP 2", limits = c(-26, 26), breaks = seq(-26, 26, 10))  
  scale_x_continuous("UMAP 1", limits = c(-26, 24), breaks = seq(-26, 24, 10))  
  theme_bw()  
  theme(legend.title = element_blank(), 
        legend.text = element_text(size = 10),
        legend.justification = "top",
        legend.spacing.y = unit(0, "lines"),
        legend.margin = margin(0, 0, 0, 0),
        legend.key.size = unit(1, 'lines'),
        panel.border = element_rect(size = 1, color = "black"),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.text = element_text(size = 8),
        axis.title.x = element_text(size = 10, margin = margin(t = 5)),
        axis.title.y = element_text(size = 10, margin = margin(r = 5)),
        plot.margin = margin(t = 0.25, b = 0.25, l = 0.25, r = 0.25, "cm"))

enter image description here

  • Related