Ручное заполнение шкалы - значения цветовой шкалы, сопоставленные с разными цветами на разных графиках - PullRequest
1 голос
/ 26 апреля 2020

У меня есть ряд фреймов данных, которые выглядят так, как показано ниже:

> 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

Я хочу построить свои данные так, чтобы заполнение точек основывалось на значении в столбце s_n_max. Я также хочу, чтобы цвета, которые соответствуют определенным интервалам значений s_n_max, были согласованы для разных фреймов данных и разных графиков, чтобы можно было визуально сравнивать графики. Это кажется проблемой, так как значения s_n_max могут быть разными в разных фреймах данных, поэтому в одном фрейме данных значения s_n_max могут находиться в диапазоне от 1,5 до 2,5, тогда как в другом фрейме данных значения s_n_max могут находиться в диапазоне от 0,5 до 2 или 5 .

Я бы хотел, чтобы цвета шкалы стабильно назначались 4 классам значений s_n_max (s_n_max <1, 1 <= s_n_max <1,5, 1,5 <= s_n_max <2, s_n_max> = 2) и придерживаться этого цветового диапазона присвоения значений, даже если s_n_max в определенном фрейме данных пропускает определенные значения.

В настоящее время я использую этот код для генерации графика ниже

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

Я думал, что введение разрывов и указание цветов в порядке в scale_fill_manual будет работать, но, как вы можете видеть на графике, более светлый цвет (my_pal_quant_2 1 ) это не назначен на первый интервал значений s_n_max, как я хочу (s_n_max <1). </p>

Я думаю, что проблема заключается в том, что я должен установить пределы моей шкалы, но если я Пределы ify в коде графика следующим образом

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)))

Результат такой же, как на графике 2 ниже - цветовая заливка точек исчезла, и ограничения, кажется, перезаписывают разрывы. plot 2

Есть идеи, почему это происходит и как я могу это решить?

Здесь многократно (я надеюсь) версия моих данных

> 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")
> 

1 Ответ

0 голосов
/ 26 апреля 2020

Здесь возможное решение - создать 4 группы вне ggplot2 и передать их уровни в breaks аргумент scale_fill_manual функции:

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

Это отвечает вашей функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...