Another workaround is to insert a 'Rectangle' shape with a Gradient Fill using the same color-ramp as your data. Overlay this rectangle over your legend.
Accuracy of this method may not be perfect, particularly if you use transform curves when assigning the color ramp to your data.
I am not sure how did you add the rectangle into your legend, but it looks like it is a graphic rectangle. Now to control the space for only one item in the legend, you can double-click the text in the legend (GNSS) and click on the space button on the keyboard to shift the text by the number of spaces you like.
The result will be something like this:
This might be a more appropriate question for stackoverflow.com, but I'll go ahead and answer. First off, you should probably combine all your different dataframes into one, with a separate column for the feature of interest:
Gcross_normal$feature <- "normal"
Gcross_tumor$feature <- "tumor"
Gcross_invasive$feature <- "invasive"