Либо легенды не созданы, либо если они созданы, они неправильно назначены для данных

Я использовал сплайн-интерполяцию для следующих данных:

structure(list(HOUR = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23), Event_01 = c(9.5, 7, 12.5, 19, 5, 10.5, 6, 1, 6, 9, 0, 28, 5, 27, 14, 24, 31, 13, 6.5, 38.5, 2.5, 5.5, 8.5, 9.5), Event_02 = c(6.5, 8, 18, 22.5,11.5, 9, 23.5, 6, 3, 13, 7, 3.5, 43.5, 5, 4.5, 11.5, 29.5, 10, 11.5, 0.5, 1, 5, 10, 14.5), Event_03 = c(1, 12, 32.5, 57.5, 50, 79, 33.5, 6.5, 16, 27, 5, 6.5, 12.5, 2, 1.5, 4.5, 0.5, 11.5, 7.5, 0.5, 1, 7, 8.5, 0),Event_04 = c(6.8, 0, 8.9, 1, 0, 4.8, 12.5, 0.73, 7.7, 3.8, 17, 7.1, 1.8, 9.2, 15.7, 21.1, 37.3, 5.41, 23.3, 35.1, 25.9, 7.91, 64.5, 68.5), Event_05 = c(16.7, 4.1, 0.297, 14.7, 13.5, 0, 0, 0, 0, 4.3, 5.6, 1.3, 0.71, 16.3, 40.1, 46.5, 55.1, 16, 29.7, 38.1, 10.7, 19.3, 0, 0), Event_06 = c(0.23, 0.297, 14.4, 79.5, 1.81, 6.09, 28.2, 0, 0.5, 1, 1.8, 0, 0.2, 0, 8.9, 6.4, 74.4, 2, 20.6, 0, 0, 0, 9.11, 36.6), Event_07 = c(95.2, 44.5, 17.5, 11.2, 4.28, 1, 0.811, 0.5, 0.189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), Event_08 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 1, 3.5, 29, 64, 61, 5.5, 3, 10, 0, 0)), row.names = c(NA, -24L), class = "data.frame") 

Ниже приведены интерполированные данные, которые я использовал для построения графика, здесь Event_01 — это spl_01 в приведенном ниже коде.

structure(list(x = c(0, 0.323943661971831,0.647887323943662,0.971830985915493, 1.29577464788732,1.61971830985915,1.94366197183099, 2.26760563380282, 2.59154929577465, 2.91549295774648, 3.23943661971831, 3.56338028169014, 3.88732394366197, 4.2112676056338, 4.53521126760563, 4.85915492957746,5.1830985915493, 5.50704225352113, 5.83098591549296, 6.15492957746479, 6.47887323943662, 6.80281690140845, 7.12676056338028, 7.45070422535211, 7.77464788732394, 8.09859154929578, 8.42253521126761, 8.74647887323944, 9.07042253521127, 9.3943661971831, 9.71830985915493, 10.0422535211268, 10.3661971830986, 10.6901408450704, 11.0140845070423, 11.3380281690141, 11.6619718309859, 11.9859154929577, 12.3098591549296, 12.6338028169014, 12.9577464788732, 13.2816901408451, 13.6056338028169, 13.9295774647887, 14.2535211267606, 14.5774647887324, 14.9014084507042, 15.2253521126761, 15.5492957746479, 15.8732394366197, 16.1971830985916, 16.5211267605634, 16.8450704225352, 17.169014084507, 17.4929577464789, 17.8169014084507, 18.1408450704225, 18.4647887323944, 18.7887323943662, 19.112676056338, 19.4366197183099, 19.7605633802817, 20.0845070422535, 20.4084507042254, 20.7323943661972, 21.056338028169, 21.3802816901408, 21.7042253521127, 22.0281690140845, 22.3521126760563, 22.6760563380282, 23), Event_01 = c(9.5, 7.61339962211308, 6.84489414544315,6.95652217735349, 7.76408394739537, 9.36284027167982, 11.9385718858489, 15.4780178734598, 18.6138048041324, 19.4146746592965, 16.2903666901755, 10.7454563154074, 5.9262169070542, 4.7297844370838, 6.81449841671686, 9.66684468293744, 10.8412568025007, 9.75419011234066, 7.39248627225536, 4.77960015811686, 2.61838081001007, 1.27236156253392, 1.08247557297311, 2.13182862940852, 4.1608420589837, 6.87976105266377, 9.51491674334209, 10.4819312704944, 8.13030434139983, 2.73493412219963, -1.33713634240349, 0.799847375473028, 10.9697176851655, 22.6689238190535, 27.9918436433932, 22.1923761235166, 11.6200090454086, 5.05857032985571, 8.89506459669622, 18.5919073161713, 26.500685819989, 26.4129429703938, 20.67255425835, 14.7680295730887, 13.5545815837986, 16.8984774988385, 22.3186316867511, 27.4143910484632, 30.7715851518744, 31.5648773319545, 29.0555500231982, 23.6434054160119, 16.5848399935523, 9.20156696250281, 3.73931313392565, 3.31686880849124, 10.9292108490813, 24.5249053330549, 36.0689418081613, 37.2986362216934, 26.4252578592663, 11.3144175525809, 0.580657374170864, -1.36985577821674, 1.93565403667586, 6.09583268483259, 8.15237965553452, 8.61234357246622, 8.49214640138242, 8.57655792141028, 8.93517211072439, 9.5), Event_02 = c(6.5, 5.2270088371399, 5.81207234453764, 7.77926773691979, 10.6593694238805, 14.0179647899546, 17.4319174705753, 20.4532960768346, 22.4654846636412, 22.7816230332891, 20.837031999862, 17.1720081865662, 12.912997668886, 9.18827584095015, 7.08256971606829, 7.65140388250258, 11.809128623484, 18.0460704461263, 22.8081899724197, 22.6058076200243, 17.2265459813331, 9.92658615697658, 4.08871037052076, 1.45523405913204, 1.58808941316028, 3.89473073724854, 7.50720846129372, 11.0961844806905, 13.2909421421748, 13.1734754919915, 10.7879470885395, 6.30318894269286, 0.91946715823211, -1.35780334885025, 3.94897441291285, 18.6304178566054, 35.0410242883893, 43.465033521617, 36.9896649278584, 21.4779649728754, 6.43095697203148, -0.187403311468207, 0.457593142673783, 3.84389357006835, 5.99659821384475, 7.25886389485085, 10.0055397925251, 16.2478210121734, 24.0609217609132, 29.170660217941, 27.6190639454656, 20.4750690675264, 12.5897342070345, 8.70576663531898, 9.38865926765852, 11.2570222837813, 10.8557355930475, 7.31240900670251, 2.81701936873091, -0.286681439256614, -0.949721470675431,-0.0539810830135957, 1.36468983757907, 2.65636463865379, 3.89863732953303, 5.24946953254536, 6.79723933011914, 8.46322688408646, 10.144150552269, 11.7478988797294, 13.2168459379709, 14.5), Event_03 = c(1, 3.69822485223062, 7.28714120237152, 11.5967766271108, 16.5708182572742, 22.7437718109021, 30.8415147183411, 41.1691226463358, 51.1688888841139, 57.0909761959955, 55.8880006577032, 50.8888390704731, 48.8047424929532, 55.6436726036314, 68.4117132021609, 78.0785201177672, 75.993681365489, 61.9755503977128, 42.9848426023007, 26.0634974925125, 14.6176462903367, 8.20543394410154, 6.19632524974241, 7.80471913891945, 12.03891283162, 17.8859852312884, 23.8126367818958, 27.4137695366894, 26.2120924350382, 19.6140527898853, 11.0297005463918, 4.3791333689889, 2.2428471181955, 3.55807781376812, 6.64855822779775, 9.94854717223898, 12.280448198026, 12.5518226905698, 10.0866833391222, 6.10720503516314, 2.37607328428644, 0.402204707899257, 0.187308875455902, 1.17890559945882, 2.79794801770657, 4.26439486718006, 4.70363484370608, 3.39690656028224, 1.2648714294067, 0.206766093706999, 1.9770833894057, 6.04800863650303, 10.1745750524143, 12.1504370028654, 11.4457493685617, 9.11472529840058, 6.26202596622197, 3.62185305721622, 1.48915097141279, 0.131121875326608, -0.307366859033949, 0.136119270126445, 1.40790408529554, 3.3205272255802, 5.4343259511466, 7.28200534586711, 8.48962158521131, 8.90740416658187, 8.41853393218605, 6.89120615187022, 4.14735139635593, 0), Event_04 = c(6.8, 0.495837273590017, -1.47757166345161, -0.225047562652488, 3.05551013354516, 6.68236566041985, 8.81706410548725, 7.965755790621, 4.97899611735547, 1.68360640256777, -0.257119605623201, -0.685028079983249, -0.240387143283007, 0.48392364736869, 1.56579606483526, 3.53292389801559, 6.8423362475733, 10.5899888745301, 12.7239395984228, 11.2535655603059, 6.67130863639221, 2.09758177618759, 0.715822721492942, 3.11952774531603, 6.45984059295107, 7.67863959548037, 5.8698352972189, 3.73267237215024, 4.29935507940417, 8.71613513310514, 14.1209557267534, 17.1411225070606, 15.7513862150782, 11.591088506491, 6.91664343005585, 3.55708577708248, 1.84058221285448, 1.76601327144733, 3.2449314047062, 5.79085245526493, 8.80394946932401, 11.7091915758006, 14.0788450440664, 15.5393362977747, 15.9110235339414, 16.5297166899098, 19.4442621501428, 26.2888532411932, 34.3076645022404, 38.1244581868506, 32.8161896839931, 20.5198941666481, 8.68443738249332, 4.59220663875428, 9.3611842598336, 18.2848529089182, 26.5065329675913, 31.6601183218077, 34.3325991866564, 35.268998575764, 34.4937830250616, 30.9568826975136, 23.5425210509909, 13.5256119804392, 6.68786383365874, 9.29863902276834, 24.0995723168223, 45.360812923324, 66.1072822977031, 79.9302050522147, 82.1691437693323, 68.5), Event_05 = c(16.7, 12.5441855252254, 8.34362855313822, 4.41787723956478, 1.16077854846054, -0.647604745472042, -0.102110924095139, 3.42734525580004, 8.69945934039577, 13.6936357920166, 16.5426115931125, 16.7863788697185, 14.7114273859331, 10.6679443818312, 5.70292384305104, 1.33062045188958, -1.00570088424742, -1.23500541105728, -0.443565715518948, 0.270469019624708, 0.430867875687446, 0.219612015509464,-0.149146768590174, -0.438982573074371, -0.383864445806345, 0.28110539133936, 1.58317818386767, 3.15147212444825, 4.57761541053009, 5.53765540150872, 5.88705969035364, 5.50442621518658, 4.38475352211244, 2.83961009560673, 1.23387626494397, -0.0308252672118428, -0.423840133383948, 0.613795208423324, 3.5520543963481, 8.45529996748449, 15.2723947903212, 23.7401475293834, 32.3361590952822, 39.0750282927206, 42.3509203413568, 43.5309429168244, 45.3810052995117, 50.2326752001102, 55.7792370358973, 56.9453732853217, 49.0926912335355, 34.4363234760545, 20.347826671831, 14.0435596870459, 16.889231694269, 24.722507025849, 33.1993970759804, 39.0899119313348, 40.4849403612008, 35.6033457132876, 25.4459170193988, 15.162015181805, 10.2069952272305, 12.5038073534301, 17.3163118812153, 19.178412780952, 14.9786059132215, 7.25970437041171, -0.604347935716486, -5.61758775273317, -5.95098499951591, 0), Event_06 = c(0.200000000000003, 3.21195723374961, 2.91277688880917, 0.560254897687049, -2.05636985727843, -0.385342177496417, 11.0198982232709, 35.6383504153214, 63.5633766611203, 79.3142423727135, 69.5804089914321, 40.8067268070998, 9.91756091653917, -7.16459988298072, -7.97813777924387, 0.912050882121392, 12.8810856447921, 23.1414883471404, 28.4554036511809, 25.793723692691, 16.2178646064498, 5.11848074313128, -1.992541269976, -3.15709316491078, -1.14047763321323, 0.984167186195019, 1.55050511578261, 1.24903789796083, 0.99267212460404, 1.27599300936473, 1.70450658459435, 1.77037539775108, 1.21323889676258, 0.445789260871091,-0.00595799836593398, 0.159928249868152, 0.458440840406507, 0.231920619216309, -0.845791438766333, -1.58989495221456, -0.385336742811433, 3.78242759463506, 8.36171130254352, 9.48954873914033, 4.38171976037601, -1.29680984133125, 2.09435916378687, 22.6619079955276, 52.1929965789649, 72.7336251386671, 67.6180549702337, 40.6933654193044, 11.239976165459, -1.86603302731491, 3.99253266797744, 16.0704981381424, 21.3020418888169, 15.5988071458265, 5.51710113049003, -1.84161036334854, -3.29978054262248, -1.53144236051194,0.324981014347511, 0.542957418819504, 0.057571791228776, 0.0977693332278966, 1.58852495124615, 4.72485925034064, 9.59449650044407, 16.333957067782, 25.2304086651805, 36.6), Event_07 = c(95.2, 76.1548247486645, 59.6586136306095, 45.6093831918477, 33.9423668154075, 24.7862563157951, 18.3324065179457, 14.634384352318, 12.8083634438743, 11.5801645978504, 9.79825093696731, 7.4297446084957, 5.03517565978141, 3.14826377150478, 1.90728741404065, 1.18535234439483, 0.850399016222747, 0.765688024540133, 0.790533079251887, 0.787463444447199, 0.704255489633026, 0.578907528169755, 0.453249081830991, 0.348475330352227, 0.258355860910787, 0.174851405852688, 0.0964871090569559, 0.0327855784719879, -0.00572308803209142, -0.0156597578578521, -0.00884359971674018, 0.000968590840131486, 0.00419573731708972,0.00261329431342138, -9.09505304274809e-05, -0.00111442420552958, -0.000763245577884933, -2.55715306000146e-05, 0.000293192589109531, 0.000220612911431297, 2.14481121962924e-05, -7.63164479522141e-05, -6.31710642299776e-05, -9.93804095763098e-06, 1.96226163098208e-05, 1.79327561048159e-05, 3.84839742201031e-06, -4.97282581467029e-06, -5.04954447277398e-06, -1.36223439657862e-06, 1.23814239614973e-06, 1.41090271441616e-06, 4.5641091458994e-07, -3.01436674867037e-07, -3.91276230231932e-07, -1.47267785942592e-07, 7.12280875316584e-08, 1.07711900092643e-07, 4.62184444957681e-08, -1.61336700389717e-08, -2.94398034967966e-08, -1.42035750258855e-08, 3.42607864455438e-09, 8.01398230033908e-09, 4.32193822646381e-09, -6.58441811773969e-10, -2.26382218255561e-09, -1.42198982466289e-09, 1.17426517505667e-10, 9.78554312547201e-10, 9.39412140045312e-10, 0), Event_08 = c(0, 1.97501653865401e-08, 2.05730889443126e-08, 2.4687706733175e-09, -2.98958604193838e-08, -4.7594512147815e-08, -1.38430558064977e-08, 9.08642661983835e-08, 1.68485661499827e-07, 7.20297481507733e-08, -2.98615425416837e-07, -6.18941317897945e-07, -3.39193670145872e-07, 9.71694833170912e-07, 2.2645309233768e-06, 1.49749662469696e-06, -3.09615237496876e-06, -8.22617670081403e-06, -6.33739327863645e-06, 9.5955658471037e-06, 2.96627654318938e-05, 2.60306590192294e-05, -2.86395645540243e-05, -0.000106161432466867, -0.000104548502293633, 8.09085621931325e-05, 0.00037701758771131, 0.000412545144899753, -0.000208936998112408, -0.00132810607080896, -0.0016044741221854, 0.00045092430153756, 0.00463815752579488, 0.00616406993073543, -0.000537614894473244, -0.0160464462307734, -0.0234296124477496, -0.00191214051997395, 0.0698170074469639, 0.215512223619295, 0.459623656783214, 0.799751893985649, 1.07405445711749, 1.06206274008542, 0.661953765095714, 0.700152437077675, 2.43983433716472, 7.04433746722357, 14.6038081719702, 24.5678022338879, 36.3312872203864, 48.6238792232563, 59.6746002306471, 67.6951962632725, 70.7922877076959, 66.9731659443241, 54.3618951606746, 34.9361708366816, 15.2429751661605, 2.0204286555642, -2.00088262805462, -0.0666446439867805, 4.09875232125227, 7.73168437068042, 9.87971008735865, 9.79286579712875, 7.2765866996866, 3.47004291329713, -0.291549104269716, -2.76213061017673, -2.97089793738165, 0)), class = "data.frame", row.names = c(NA, -72L))

Я хочу построить гладкую кривую, которая будет проходить через все заданные точки. Я использовал для этого сплайн-интерполяцию, но в какой-то момент она дает некоторые отрицательные значения, которые я хотел бы отбросить. Я попытался построить несколько графиков, используя ggplot и geom_line на одном холсте, но он не создает легенду для графика. Я рассмотрел несколько похожих вопросов на этом форуме и изменил положение colour внутри aes, как было предложено в каком-то вопросе, но затем появилась легенда, но цвета не соответствовали данным, для которых они были назначены.

Ниже то, что я пробовал:

  p <- ggplot() + geom_point() + geom_line(data = spl_01, aes(x = x, y = y), colour  = "blue") +
  geom_line(data = spl_02, aes(x = x, y = y), colour = "grey0" ) +
  geom_line(data = spl_03, aes(x = x, y = y), colour = "dodgerblue3") +
  geom_line(data = spl_04, aes(x = x, y = y), colour = "yellowgreen") +
  geom_line(data = spl_05, aes(x = x, y = y), colour = "orange") + 
  geom_line(data = spl_06, aes(x = x, y = y), colour = "deeppink2") + 
  geom_line(data = spl_07, aes(x = x, y = y), colour = "darkmagenta") + 
  geom_line(data = spl_08, aes(x = x, y = y), colour = "deepskyblue3") + 
  scale_color_manual("", values = c("blue" = "Event_01","grey0" = "Event_02","dodgerblue3" = "Event_03","yellowgreen"= "Event_04","orange" = "Event_05",
                                    "deeppink2" = "Event_06","darkmagenta" = "Event_07","deepskyblue3" = "Event_08")) +
  ggtitle("Hourly Rainfall on Extreme Event")


   p <- p + scale_y_continuous(expand = expansion(mult = c(0, 0.05)), limits = c(-10, 100), breaks = c(-10,0,10,20,30,40,50,60,70,80,90), 
                            labels = c("-10","0","10","20","30","40","50","60","70","80","90")) + 
   scale_x_continuous(expand = expansion(mult = c(0.024, 0.05)),
                     limits = c(0,23.5), breaks = c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23),
                     labels = c("0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23")) + 
   theme(axis.text.x=element_text(color = "black", size=12, face = "bold", vjust = 0.01)) + 
   theme(axis.text.y = element_text(color = "black", size=12, face = "bold", hjust = -0.3))


   p <- p + theme( axis.line = element_line(colour = "black", size = 0.5, linetype = "solid")) + labs( y = "RAIN (mm)") + labs(x = "HOUR")

   p <- p + theme(plot.title = element_text(colour = "red4", size = "18", face = "bold", hjust = 0.5, vjust = 0.5), 
               axis.title=element_text(colour = "blue2", size = 14, face = "bold", vjust = 0.1)) 

Вероятно, было бы проще связать все кадры данных spl_02 - spl_08 вместе, а затем использовать что-то вроде ggplot(data, aes(x = x, y = y, color = <yourEventColumn>)) + geom_line(). Чтобы помочь вам, было бы лучше, если бы вы предоставили некоторые примеры данных ваших кадров данных spl_xx с помощью dput().

Ben 25.12.2020 14:35

@Ben Я добавил интерполированные данные выше.

Ajay 25.12.2020 15:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы хотите привести отрицательные значения к 0, а затем построить график. Это будет намного проще, если вы сначала используете преобразование данных в «длинный» формат.

Также вы близки к своей пользовательской цветовой схеме, но у вас поменялись местами имена и значения. Имена должны соответствовать меткам данных, а цвета должны соответствовать фактическим значениям в векторе.

Вот один из подходов с использованием интерполированных данных, которыми вы поделились:

library(tidyverse)

# set your manual color scheme
color_scheme <- setNames(
  c(
    "blue",
    "grey0",
    "dodgerblue3",
    "yellowgreen",
    "orange",
    "deeppink2",
    "darkmagenta",
    "deepskyblue3"
  ),
  names(spl)[-1]
)

spl %>% 
  mutate_at(.vars = vars(-x), function(x){ifelse(x < 0, 0, x)}) %>%
  pivot_longer(-x, names_to = "event", values_to = "value") %>%
  ggplot(aes(x = x, y = value, color = event)) +
  geom_line(size = 1) +
  scale_color_manual(values = color_scheme) +
  ggtitle("Hourly Rainfall on Extreme Event")

Это дает следующий сюжет:

Затем вы можете дополнительно настроить эстетику по мере необходимости.

Другие вопросы по теме