2017-07-19 50 views
1

我已經使用geom_pointscale_color_manual功能。R:geom_contour中不同輪廓線的顏色不同

p <- ggplot() + geom_point(aes(x=X1,y=X2,colour=types,shape=types),size=2,data=df) + 
     scale_color_manual(name='Colour',values=setNames(c('black','red','black','red'),c("1","2","3","4"))) + 
     scale_shape_manual(name='Shape',values=setNames(c(16,17,1,2),c("1","2","3","4"))) 

上面的代碼很好,併產生我想要的情節。當涉及到geom_contour時,我可以使用breaks=c(-1,0,1)繪製不同的輪廓級別,但我無法爲不同的輪廓級別指定不同的顏色。 請注意,我希望能夠將選定的顏色分配到不同的輪廓級別(不是隨機的不同顏色)。

鑑於我在上面的代碼中使用了scale_color_manual,我不能在下面再次使用它。下面的代碼只允許我爲所有輪廓級別分配一種顏色,這不是我想要的。

p2 <- p + geom_contour(aes(x=X1,y=X2,z=z),data=df2,breaks=c(-1,0,1),color=c('blue')) 
    p2 

顯然,我知道這樣做的天真方式(見下文)。但是,有沒有更有效的方法來做到這一點?

 p2 <- p + geom_contour(aes(x=X1,y=X2,z=z),data=df2,breaks=c(-1),color=c('red')) + 
geom_contour(aes(x=X1,y=X2,z=z),data=df2,breaks=c(0),color=c('green')) + 
geom_contour(aes(x=X1,y=X2,z=z),data=df2,breaks=c(1),color=c('blue')) 
     p2 

dput(df) 
structure(list(X1 = c(-6.44977381705335, -5.86772098834299, -6.18831949905101, 
2.50255997581876, 6.81077819461353, -4.81885695157398, -8.13628904905582, 
-4.55875671282162, 5.89183454164029, -0.146467446589933, -4.61474265176665, 
-5.98659605489076, 0.0909229963547986, -9.1652607056479, -1.33551493065915, 
6.69035939361548, -3.37760962411701, 5.43399090114783, 4.57467892224542, 
-9.76700887100503, -2.34739551130911, 5.65520315686131, 4.15213125986202, 
7.22701634383665, -1.42823824205647, 6.46388887394207, -6.50460978848569, 
-4.06284802697163, 2.76998492379248, 1.174097380, -8.71400756526808, 
-7.76215146554228, 0.322086031328283, 1.74363132654718, -3.53116679846872, 
-6.18369372092317, -5.19323846185695, 4.32936184122116, -8.16558347062291, 
-5.26413410688284, -1.97360500048404, -4.24625982078981, -5.47732672766356, 
-8.60132541948597, 6.45995209521195, -2.52435303552415, 6.57427656055987, 
6.27359601847433, -5.59371126484291, 10.0526873582003, 6.17457680233297, 
-6.9541186153157, 0.40549390161672, -0.841645400138752, -5.7017785448579, 
6.80398548323749, -11.0650041444188, -4.79074834686519, 9.22232642139733, 
-3.42982493624387, -3.48136582631746, 7.98024765498543, 2.62913006721659, 
6.83588363156073, -8.08814637220334, 9.54986860239881, -6.5969384487358, 
-6.78934717391711, 1.65645022806005, -2.44492481136968, 2.74443632661556, 
-4.1325850402456, 5.36003439644679, 3.11476368512663, -0.292003075557519, 
7.57271999483148, -5.77146848046308, -5.59381452206785, 3.6731912435471, 
2.31769427903709, -8.05525752574131, -6.09758890193155, -0.482763622038701, 
-7.11240032070039, -5.33176707187655, 6.09752059526277, 5.30345814008884, 
6.30028085993043, 3.5793495144773, -4.31703868437582, -0.479689490884981, 
7.69638541983004, 3.29610703452622, -8.03598984715877, 2.89272071405511, 
4.05980419535969, -5.67589504875785, 9.04922577415499, -9.32363385399716, 
5.25467825820699, 7.80834825278602, -2.08551747988082, -1.96771125071077, 
-10.2606422185603, -6.95049431988541, 11.3784136671021, -2.42214650056279, 
3.33182343492938, 2.14384801627174, 4.00860308940692, -5.8737010198887, 
-5.03534530527824, 2.64268058206151, -5.62619433603552, 5.10137854046003, 
1.98835519006701, -3.78745419417686, -7.36555674573082, 4.44406198302299, 
-2.00363614913343, 0.813771663411583, -2.45327549540688, 2.620944765878, 
-4.38739386556914, 6.66158108967303, 4.02149663561302, 2.70429061747281, 
-3.51513951493604, 5.49110934607702, 7.19136851850066, -6.94632538074928, 
-3.91452791623334, -9.21763125985378, -0.158092722969361, -3.85458464192521, 
5.86543580792614, -0.357471406692021, 8.03075473116177, -1.60900836380594, 
-8.92574561363744, 5.75356182064235, 5.1137928397954, 3.66640412763783, 
0.891426126828935, -3.54984180835152, -8.65257155718141, 9.19136562338998, 
-4.8554079380693, 6.92821432530213, 4.79564720393866, -4.37881217133335, 
2.71185964901423, -3.98979497352754, 0.434881897262731, 3.84822818036998, 
-8.35221384114227, -2.23888492568724, -5.90275859676031, 2.63378445881081, 
-3.09115407198816, 3.80044689789691, -0.798963211870986, -4.807956141696, 
3.16111055690917, 2.62078724970627, -8.25587593957069, -6.81980261114944, 
7.86821223690006, 2.01114565158489, -5.61188878600422, -0.854499893423315, 
-6.64395285626679, -4.95436845045886, 6.07137987675919, 0.532118018821881, 
9.16627566310939, 7.64564391699162, 0.0955238443658999, 9.98199933222274, 
-5.85851105575778, 3.39546760322555, -2.18217871641953, 10.3910130710905, 
-4.71777170439152, 3.52027021558033, 4.76326550946245, -11.357947554853, 
3.67135271958161, 2.53691938267177, -5.45863227295202, 0.225148432148615, 
6.86973518465812, 5.42888468269468, -1.33318595979723, -6.94188257041425, 
1.99310268442481, -8.24546574903235, 4.8966410933004, 9.8592213340013, 
-4.0491397149044), X2 = c(-5.06244365784151, -5.8987281339911, 
-5.37349971023902, 4.16495128419588, 8.15507682766342, -5.57021269674139, 
-6.41456180798995, -3.06590119588043, 3.88787251432732, -2.47196116777225, 
-4.57571850019332, -4.19698471159102, -4.80193860967416, -7.00186067247651, 
-5.41945279202993, 7.93626827841283, -2.61549861367913, 4.63829654550617, 
4.85824632553282, -4.93346154937519, -4.83229511299798, 6.6152332371874, 
4.56898662525419, 7.16880856654132, -3.94498692407238, 5.80333245514549, 
-6.84153814136443, -2.92318606735035, -3.40372439373528, 4.36031255534616, 
-7.45845718039909, -5.80396258656565, 1.94902233172771, 4.90781684166994, 
-3.364949011488, -5.32598745558741, -5.43737161116244, 4.57662233751372, 
-6.18098351370591, -4.86128025733294, -4.53902866077078, -4.13077302193884, 
-4.46152637582998, -6.28385555635043, 6.3188827021441, -5.73417434547753, 
6.15700039728532, 4.5112039921496, -5.31217025920825, 5.87528699319112, 
4.91744707352708, -6.3403028881029, -5.72948323321391, 3.87482826873545, 
-5.04773239115134, 5.94189504870109, -8.03395022354751, -4.22528955234745, 
4.55236743690209, -3.71887250212682, -4.24343323804064, 6.95952122492533, 
3.36449674563227, 3.53886794672324, -6.35682988379097, 4.27137240007496, 
-7.30265268196247, -4.07360093528643, 3.96405210735821, -4.74043809363991, 
3.51491722449316, -4.06862206237093, 3.70934853578556, 5.36135986086172, 
-3.47918313208132, 7.82944563843494, -7.07678179737772, -4.38451750723769, 
6.06114318717419, 5.5674809925905, -6.68224058423877, -6.71336636355352, 
1.84114433528403, -3.90190110479092, -6.06604605492397, 5.96212602391351, 
3.97815484270038, 5.4851180884552, 3.78080697566849, -4.53924903416572, 
-3.55876954788063, 6.23983429220161, 5.60110257910974, -7.69218368369803, 
4.55446711036587, 5.13954493349563, -4.17924830895039, 4.48867684067589, 
-6.69565806671414, 4.29424488269814, -3.97102894179193, 6.02375514163809, 
4.17985837137699, 4.07027341550233, 4.0848434517699, -2.10532266058698, 
-8.96138246912117, -3.76418499219196, -5.44264777296324, -4.31830215888796, 
5.49750560517553, 5.71489445656827, -3.94150737126252, 4.26244214700656, 
-4.49683985741271, -5.59539685612275, 5.17405001937277, 3.73338508806773, 
-4.98080253808224, 7.19733561871967, 6.45448498513027, 5.3885218621478, 
-7.04230366747873, 3.70243179421495, -5.60909666230735, -4.81059526092899, 
-4.73716729047424, 4.22928614126872, -5.85572815885303, -4.0164308415692, 
3.99044821146756, 4.03526009245656, 3.01004868775539, -5.6384096942038, 
3.43464342952618, -4.65736379619476, 6.4560161710814, -6.34725681159788, 
7.91343345816774, 5.44769609079197, -3.51856697298174, -6.09642911294245, 
-7.19081220745693, -5.67019676607429, 4.74849844267283, 4.46253867901816, 
-4.45805056369546, 6.85001063185594, -3.71617488128034, 8.14452995937388, 
4.84714964984967, -7.25465787129501, 6.24568843245858, -6.06877947714353, 
-5.22947216685031, 5.39055328422668, 6.43567767816083, 5.45512944105762, 
-6.81365385178565, 3.94987255611401, -5.06833659986064, 6.48151993002601, 
3.99570773275464, -4.115306533464, -5.85521500040325, 4.18999597785932, 
4.37527164160867, -2.90121051370839, -7.19239039526037, 5.96014449087124, 
7.52326773974161, 4.42131379899548, 4.47882090140826, -4.45518773771659, 
-7.12802672395242, -5.20570661826238, -3.89158974812787, -6.52491835393326, 
-2.52199061036725, 3.69650828173807, -5.42484371531006, 6.37859449698025, 
-2.85822192827738, 4.8765940456656, -4.84021194011525, -4.3252833678686, 
2.63833805527148, -5.35574987379796, -3.55213594495379, 3.39574417048046, 
-6.89249157124345, -4.71995599964947, -5.19555021514789, -7.64704076364434, 
3.72000625866008, -5.14219232620273, 2.23311868803823, -5.24834710752109, 
-3.69611097863022, 4.84767895997536), y = c(1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), SV = c(FALSE, 
FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, 
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE), cls = c(TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE 
), types = structure(c(3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 1L, 3L, 1L, 1L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 1L, 1L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 
3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 3L, 3L, 1L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
1L, 3L, 1L, 3L, 3L, 1L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 2L, 4L, 4L, 2L, 
2L, 2L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 4L, 2L, 4L, 
4L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 2L, 
4L, 4L, 4L, 4L, 4L, 2L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
2L, 4L, 2L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("1", 
"2", "3", "4"), class = "factor"), types.1 = structure(c(3L, 
3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 1L, 1L, 3L, 
3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 3L, 3L, 3L, 
1L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 
3L, 3L, 3L, 1L, 1L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 1L, 3L, 3L, 1L, 3L, 
3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 4L, 2L, 4L, 4L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 2L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 2L, 2L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 
4L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 
2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 4L, 2L, 4L, 4L, 4L, 4L, 
2L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("1", "2", "3", "4"), class = "factor")), .Names = c("X1", 
"X2", "y", "SV", "cls", "types", "types.1"), row.names = c(NA, 
-200L), class = "data.frame") 

dput(df2) 
structure(list(X1 = c(-12.357947554853, -7.35794755485297, -2.35794755485297, 
2.64205244514703, 7.64205244514703, -12.357947554853, -7.35794755485297, 
-2.35794755485297, 2.64205244514703, 7.64205244514703, -12.357947554853, 
-7.35794755485297, -2.35794755485297, 2.64205244514703, 7.64205244514703, 
-12.357947554853, -7.35794755485297, -2.35794755485297, 2.64205244514703, 
7.64205244514703), X2 = c(-9.96138246912117, -9.96138246912117, 
-9.96138246912117, -9.96138246912117, -9.96138246912117, -4.96138246912117, 
-4.96138246912117, -4.96138246912117, -4.96138246912117, -4.96138246912117, 
0.0386175308788292, 0.0386175308788292, 0.0386175308788292, 0.0386175308788292, 
0.0386175308788292, 5.03861753087883, 5.03861753087883, 5.03861753087883, 
5.03861753087883, 5.03861753087883), z = c(0.628662062564458, 
0.498421720565904, -1.12771463714776, -1.63884534684287, -0.688912947356736, 
0.587768272216343, 1.34499020819771, 0.947023214275936, -1.28034648027294, 
-1.3795676265921, -0.59403202938268, -0.227372376794684, 1.09688324862705, 
0.983586365225921, -0.185820434838491, -0.843964024616466, -1.42103620571178, 
-1.14891705466444, 1.05570798950603, 1.3845353485357)), .Names = c("X1", 
"X2", "z"), row.names = c(NA, -20L), class = "data.frame") 
+0

請閱讀[如何問一個好問題](http://stackoverflow.com/help/how-to-ask)以及如何給[可重現的示例](http://stackoverflow.com /問題/ 5963269)。這會讓其他人更容易幫助你。但是,也許你應該已經在160 Q以後意識到這一點。 – Axeman

+1

我已經包含了數據子集供您重現圖。 – mynameisJEFF

+0

'data.frame中的錯誤(xgrid,z = func):未找到'func'對象。請檢查您的代碼是否可運行,或者只是提供一個小而簡單的玩具示例。 – Axeman

回答

2

它看起來像我在每個geom_contour對象中使用相同的變量。您需要在審美中添加其他變量來控制線條的顏色。通常colour需要一個因子作爲輸入。

+0

你能舉一個例子嗎?因爲我希望能夠保留將我選擇的顏色分配到不同輪廓級別的功能 – mynameisJEFF