Annalisa Bellandi
Annalisa Bellandi

Reputation: 25

Scale fill manual - values of the color scale mapped to different colors on different plots

I have a series of data frames looking like this one below:

> head(df_maxima, 10)
        t distance_max intesity_max  s_n_max
1   4.034       49.706     1979.922 2.251441
2   4.244       49.706     2008.562 2.269629
3   8.068       77.321     2248.527 2.388716
4   8.278       77.321     2255.795 2.389224
5  12.102       99.412     2330.322 2.512899
6  12.312       99.412     2327.884 2.517018
7  16.136      121.504     2348.834 2.541273
8  16.346      121.504     2348.147 2.539562
9  20.170      138.073     2309.776 2.583442
10 20.380      138.073     2307.124 2.579166

> tail(df_maxima, 10)
          t distance_max intesity_max  s_n_max
139 280.653      331.375     1213.470 1.296612
140 280.863      331.375     1218.176 1.310372
141 284.687      331.375     1226.017 1.304955
142 284.897      331.375     1228.822 1.309873
143 288.721      325.852     1233.728 1.338480
144 288.930      325.852     1239.651 1.339542
145 292.754      325.852     1240.988 1.342206
146 292.965      325.852     1243.669 1.347340
147 296.789      325.852     1244.913 1.347174
148 296.999      325.852     1250.809 1.350358

I want to plot my data so that the fill of the dots is based on the value in the column s_n_max. I also want the colors that are matched to certain value intervals of s_n_max to be consistent across different data frames and so different graphs, in order to be able to compare visually the graphs. This seems to be a problem as the values of s_n_max can be different in different data frames, so in one data frame s_n_max values can range between 1.5 and 2.5, while in another data frame the values of s_n_max can range between 0.5 and 2 or 5.

I would like the colors of the scale to be assigned stably to 4 classes of values of s_n_max (s_n_max < 1, 1<= s_n_max < 1.5, 1,5 <= s_n_max < 2, s_n_max >= 2), and to stick to this color-range of values assignment even if the s_n_max in a certain data frame misses certain values.

Currently I use this code to generate the graph below

my_pal_quant_2 <- RColorBrewer::brewer.pal(9, "Blues")

    ggplot()+
    geom_point(data=df_maxima, aes(x=t, y=distance_max, fill=cut(s_n_max, c(0,1,1.5,2,max(s_n_max)))), shape=21, col=my_pal_gray[5], stroke=0.01, size=3.5, alpha=1)+
    xlab("Time [s]") +
    ylab(paste("Distance from the centre", "\n" , "[\U003BCm]"))+
    theme_bw(base_size=18)+
    theme(plot.title = element_text(hjust = 0.5))+
    labs(fill="signal/noise") +
    scale_fill_manual(values =c(my_pal_quant_2[1],my_pal_quant_2[3], my_pal_quant_2[5], my_pal_quant_2[8]))+
   guides(aesthetics = "fill", fill = guide_legend(reverse = TRUE, override.aes = list(shape = 21, size= 10)))

plot 1

I thought that introducing breaks and specifying the colors in order in scale_fill_manual would work, but as you can see in the graph, the lighter color (my_pal_quant_21) it is not assigned to the first interval of s_n_max values as I want (s_n_max < 1).

I think the issue is that I have to fix the limits of my scale, but if I specify limits in the code of the graph in this way

ggplot()+
geom_point(data=df_maxima, aes(x=t, y=distance_max, fill=cut(s_n_max, c(0,1,1.5,2,max(s_n_max)))), shape=21, col=my_pal_gray[5], stroke=0.01, size=3.5, alpha=1)+
xlab("Time [s]") +
ylab(paste("Distance from the centre", "\n" , "[\U003BCm]"))+
theme_bw(base_size=18)+
theme(plot.title = element_text(hjust = 0.5))+
labs(fill="signal/noise") +
scale_fill_manual(values =c(my_pal_quant_2[1],my_pal_quant_2[3], my_pal_quant_2[5], my_pal_quant_2[8]), limits=c(0,10))+
guides(aesthetics = "fill", fill = guide_legend(reverse = TRUE, override.aes = list(shape = 21, size= 10)))

The result is as on plot 2 below - the color fill of the dots has disappeared and the limits seems to have overwritten the breaks. plot 2

Any idea why is this happening and how can I solve it?

Here a reusable (I hope) version of my data

> dput(df_maxima)
structure(list(t = c(4.034, 4.244, 8.068, 8.278, 12.102, 12.312, 
16.136, 16.346, 20.17, 20.38, 24.204, 24.414, 28.238, 28.448, 
32.272, 32.482, 36.306, 36.516, 40.34, 40.55, 44.374, 44.584, 
48.408, 48.618, 52.441, 52.652, 56.476, 56.686, 60.51, 60.72, 
64.544, 64.754, 68.578, 68.788, 72.611, 72.822, 76.645, 76.856, 
80.68, 80.89, 84.714, 84.924, 88.748, 88.958, 92.781, 92.992, 
96.816, 97.026, 98.175, 102, 102.21, 106.034, 106.244, 110.068, 
110.278, 114.102, 114.312, 118.136, 118.346, 122.17, 122.38, 
126.204, 126.414, 130.238, 130.448, 134.272, 134.482, 138.306, 
138.516, 142.34, 142.55, 146.373, 146.584, 150.408, 150.618, 
154.442, 154.652, 158.475, 158.686, 162.51, 162.72, 166.544, 
166.754, 170.578, 170.788, 174.612, 174.821, 178.645, 178.856, 
182.68, 182.89, 186.715, 186.924, 190.749, 190.958, 194.783, 
194.993, 198.817, 199.027, 200.175, 204, 204.21, 208.032, 208.242, 
212.067, 212.277, 216.102, 216.312, 220.135, 220.346, 224.17, 
224.381, 228.205, 228.415, 232.239, 232.449, 236.273, 236.483, 
240.307, 240.519, 244.344, 244.554, 248.378, 248.588, 252.411, 
252.621, 256.447, 256.657, 260.48, 260.691, 264.515, 264.725, 
268.55, 268.76, 272.584, 272.794, 276.618, 276.828, 280.653, 
280.863, 284.687, 284.897, 288.721, 288.93, 292.754, 292.965, 
296.789, 296.999), distance_max = c(49.706, 49.706, 77.321, 77.321, 
99.412, 99.412, 121.504, 121.504, 138.073, 138.073, 154.641, 
154.641, 160.164, 165.687, 176.733, 176.733, 182.256, 182.256, 
198.825, 198.825, 204.348, 204.348, 209.871, 209.871, 220.916, 
220.916, 226.439, 226.439, 231.962, 231.962, 237.485, 237.485, 
243.008, 243.008, 248.531, 248.531, 254.054, 254.054, 259.577, 
259.577, 265.1, 265.1, 265.1, 265.1, 276.146, 276.146, 281.668, 
281.668, 281.668, 287.191, 287.191, 292.714, 292.714, 298.237, 
298.237, 298.237, 298.237, 303.76, 303.76, 303.76, 303.76, 309.283, 
309.283, 314.806, 314.806, 320.329, 320.329, 320.329, 320.329, 
320.329, 320.329, 320.329, 320.329, 314.806, 314.806, 314.806, 
314.806, 314.806, 314.806, 314.806, 314.806, 314.806, 314.806, 
320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 
320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 
320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 
320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 320.329, 
320.329, 320.329, 320.329, 320.329, 320.329, 325.852, 325.852, 
331.375, 325.852, 331.375, 331.375, 331.375, 331.375, 331.375, 
331.375, 336.898, 336.898, 336.898, 336.898, 336.898, 336.898, 
336.898, 336.898, 336.898, 336.898, 336.898, 336.898, 331.375, 
331.375, 331.375, 331.375, 325.852, 325.852, 325.852, 325.852, 
325.852, 325.852), intesity_max = c(1979.92230381636, 2008.56166900881, 
2248.52723179505, 2255.79451634931, 2330.32234953711, 2327.88378516362, 
2348.8343415127, 2348.14680159507, 2309.77579065898, 2307.12423239007, 
2277.66403763103, 2276.1881433748, 2226.63189556725, 2223.04612992737, 
2187.44521152477, 2185.01854317659, 2113.40419145911, 2106.95311432289, 
2019.47872850255, 2014.75513931461, 1970.8748703856, 1967.29978877911, 
1892.83180486698, 1884.08321387381, 1860.28811848347, 1855.7989916887, 
1819.68600120569, 1815.31483959351, 1752.25959566801, 1748.94651654063, 
1707.44631517983, 1701.81874724901, 1672.31610178508, 1675.07262830824, 
1629.35577737165, 1622.95594527249, 1594.73271800544, 1592.26365342627, 
1565.15450424085, 1564.02814029807, 1529.45736225544, 1526.40298637471, 
1485.87646781073, 1482.32587007202, 1452.38332379034, 1454.36364601585, 
1432.32690458437, 1433.58090017712, 1416.20657028369, 1381.5077909554, 
1376.91061677601, 1364.03626066873, 1363.38629589693, 1359.20369261903, 
1361.42177642401, 1356.84766849606, 1355.1820901064, 1348.4887820217, 
1346.09076725648, 1323.16977340783, 1322.27276997107, 1306.4789364913, 
1304.89078683714, 1292.06132553484, 1291.47612962683, 1274.77496623058, 
1276.04234959366, 1271.43272691217, 1272.45637976839, 1264.41961088779, 
1262.66261404286, 1258.4304721833, 1257.08637663008, 1129.51935239079, 
1129.91981422936, 1122.72850546887, 1125.52847921021, 1114.91002191344, 
1112.57041678153, 1102.87212456803, 1103.0139141179, 1092.39671914476, 
1094.48738639713, 1090.77518264334, 1092.24215670475, 1092.36185428102, 
1094.1466007486, 1095.52481154781, 1096.7799517286, 1098.72028552569, 
1100.37722731199, 1100.14404983392, 1101.74967173289, 1098.72888304895, 
1101.63529496167, 1104.32279375354, 1106.09416482097, 1105.30981381202, 
1105.60346635643, 1112.34119682095, 1094.0590377904, 1096.12380055849, 
1094.31126456126, 1099.43669810833, 1109.82141151297, 1113.74550644555, 
1115.34987618966, 1118.59469793335, 1118.50411722512, 1121.03542726029, 
1113.02090147212, 1116.55315296217, 1116.52649565333, 1119.77567158107, 
1124.9297007421, 1128.98942805628, 1132.57644869893, 1138.45514326464, 
1140.14078719406, 1143.18950233488, 1150.2064714797, 1154.24855514644, 
1158.30088658969, 1162.97171227054, 1163.47885128066, 1168.31102965649, 
1169.73067354679, 1174.56368305098, 1174.84712548331, 1178.56944753478, 
1173.96461080875, 1178.97433433504, 1180.86639684943, 1185.49285459939, 
1195.04680018485, 1199.61087517408, 1206.40514550419, 1208.54362602938, 
1213.46993848896, 1218.17568229377, 1226.01745918658, 1228.82153926183, 
1233.72771711532, 1239.65120994883, 1240.98800664377, 1243.6691625855, 
1244.91314782737, 1250.80863046917), s_n_max = c(2.25144148537218, 
2.26962887230276, 2.38871589544491, 2.38922391175673, 2.51289889125301, 
2.5170179020928, 2.5412726374042, 2.53956231724249, 2.58344241539977, 
2.57916599135521, 2.42254325331079, 2.42816796633502, 2.37220684712286, 
2.40814651195294, 2.38006310500208, 2.37934846653566, 2.31890961006215, 
2.31608616128134, 2.26693619609292, 2.25612224153314, 2.0931881891597, 
2.09778079349956, 2.04645183980855, 2.03330490556759, 2.07703705705985, 
2.07014084276515, 2.00439268600544, 2.0013108262749, 1.93265951204332, 
1.93027690765212, 1.85367117349408, 1.84744199845415, 1.80213581085882, 
1.80267095818825, 1.79820713290254, 1.7910497892261, 1.73323861178584, 
1.72934330125006, 1.66232486917941, 1.66103765430581, 1.62892610676827, 
1.62460389580007, 1.58359519743233, 1.57663763185811, 1.59280956262804, 
1.59605224692903, 1.57513185505005, 1.57092109979469, 1.55201236893203, 
1.48736244804815, 1.48206570585183, 1.47833613438516, 1.4805189393531, 
1.49764205481733, 1.50533350109248, 1.49439604443481, 1.49045472310451, 
1.48702165261742, 1.48054230720796, 1.45413011763978, 1.45208336219909, 
1.43340417360416, 1.42969476117652, 1.4165296294318, 1.41088732655332, 
1.40026099710555, 1.39815883895423, 1.38917223571977, 1.39194103868671, 
1.37472546455223, 1.37955200329312, 1.36530070337863, 1.35742463825747, 
1.30031621280637, 1.30070123872516, 1.27445331707465, 1.2742742097163, 
1.24602906139047, 1.24817213460883, 1.22416583200257, 1.22489897712777, 
1.20550590696318, 1.20201181567261, 1.2273211640213, 1.22959755767437, 
1.22098561833547, 1.22306831038143, 1.2155481359841, 1.22077186429451, 
1.21416022186004, 1.21403825487672, 1.20445566473816, 1.20763840494796, 
1.19876531490627, 1.20279973453789, 1.20202981062653, 1.19847842971369, 
1.20046173375287, 1.19790682341363, 1.20114073410853, 1.18165803031087, 
1.1815533546873, 1.1803104555859, 1.18732518285618, 1.19454698002281, 
1.20073805437238, 1.20215081816326, 1.20169452668347, 1.201164773576, 
1.20537821528183, 1.20414555027744, 1.2082695928816, 1.20539379029823, 
1.20846070398292, 1.21463967864487, 1.22005674610479, 1.22609538571136, 
1.23340567583566, 1.22406225441233, 1.23818075625747, 1.23378181088266, 
1.23695367736438, 1.24586694689738, 1.2453508392526, 1.25057586814617, 
1.25490794009328, 1.24031510917234, 1.24841997032498, 1.25355962979258, 
1.25341734386246, 1.24963712427607, 1.25490871831107, 1.2587833687635, 
1.26083720278796, 1.27207911317142, 1.27470951063669, 1.28279376500857, 
1.2863610194323, 1.29661211997708, 1.31037230050035, 1.30495528634301, 
1.30987283392375, 1.33848020532095, 1.3395424299679, 1.34220559786466, 
1.34734031085204, 1.34717399611496, 1.35035801558689)), .Names = c("t", 
"distance_max", "intesity_max", "s_n_max"), row.names = c(NA, 
-148L), class = "data.frame")
> 

Upvotes: 1

Views: 1810

Answers (1)

dc37
dc37

Reputation: 16178

Here a possible solution is to generate your 4 groups outside of ggplot2 and pass their levels in breaks argument of scale_fill_manual function:

library(dplyr)

DF <- df_maxima %>% 
  mutate(Group = cut(s_n_max, breaks = c(0,1,1.5,2, Inf), include.lowest = TRUE)) 

library(ggplot2)

ggplot(DF, 
       aes(x = t, y = distance_max,
           fill = Group))+
  geom_point(color = my_pal_quant_2[5], stroke = 0.01, shape = 21, size = 3.5, alpha = 1)+
  scale_fill_manual(breaks = levels(DF$Group), drop = FALSE,
                      values = my_pal_quant_2[c(1,3,5,8)])+
  guides(fill = guide_legend(reverse = TRUE))

enter image description here

Does it answer your function ?

Upvotes: 0

Related Questions