Reputation: 25
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)))
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.
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
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))
Does it answer your function ?
Upvotes: 0