问题描述
我看过很多帖子(
我想要一个图形,其中 Z 轴在接近 0 时显示红色,在接近 1 时显示黄色.
另一个问题是我在 Z 轴上有一堆 NA,因为我只为与这些点对应的 x 和 y 值定义了表面.通常,人们使用outer(x,y,f)"来计算表面.我没有一个方程式可以让我插入数字.
有没有办法做到这一点?
df3d = 结构(列表(phi = c(0.714779631270897,0.687691682891498,0.596648688803568, 0.573930669753368, 0.742367142156744, 0.647098819439728,0.695488766544905, 0.728284245613654, 0.688278993976676, 0.692076206940355,0.721356887106184, 0.551532807978921, 0.54294513452377, 0.529948458419129,0.583705941140962, 0.556086109758564, 0.721770088612814, 0.711284095827769,0.573741332655988, 0.527342613188125, 0.762709309318822, 0.740228675759072,0.539713252759555, 0.696487636519962, 0.709494568163841, 0.537216639879562,0.551801008711386, 0.545341937291782, 0.584139265723182, 0.64967079561165,0.562544215947123, 0.716870075612315, 0.523337825235807, 0.588702763971338,0.744644767844755, 0.551489639273234, 0.617165392352849, 0.556723007149084,0.66554863194508, 0.570156474465965, 0.59324644850682, 0.552326531317577,0.607405070778153, 0.765602115588822, 0.532910404322836, 0.749202895901834,0.638084894011913, 0.594508381800896, 0.745877525852658, 0.742265176757939,0.55200104972317, 0.598724220429779, 0.704160605412078, 0.709273655686999,0.57882815350951, 0.80558646355475, 0.739236441867173, 0.556469513099474,0.560730917777703, 0.715514054617767, 0.562095774851614, 0.540152840905987,0.561824376055385, 0.595049050758879, 0.544700858333275, 0.54379044778355,0.735023707587803, 0.75761987117526, 0.529370104304623, 0.756142990929929,0.580486562475464, 0.555099817471069, 0.537232767721754, 0.68405457472067,0.572070245916932, 0.73826438688156, 0.776877621879421, 0.5417182204358,0.757617713719944, 0.536922997394714, 0.695880672257972, 0.570816629701256,0.551885077056955, 0.697426644089613, 0.700677930911186, 0.722074526398648,0.547841598427244, 0.744115961419341, 0.568163711481982, 0.631039420851915,0.52569185852275, 0.655488455712025, 0.715875702650255, 0.562828009151803,0.565017441865273, 0.554557230119741, 0.641911755728664, 0.549787832704858,0.551682550480448, 0.522229525069209), sp = 结构(c(4L, 4L,1L, 1L, 2L, 2L, 2L, 2L, 4L, 3L, 2L, 1L, 1L, 1L, 1L, 1L, 4L, 4L,1L, 1L, 2L, 2L, 1L, 3L, 2L, 1L, 1L, 1L, 1L, 4L, 1L, 4L, 1L, 1L,2L, 1L, 1L, 1L, 4L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L,1L, 1L, 4L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L,1L, 4L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 4L, 1L, 1L, 1L, 1L, 1L,1L, 1L), .Label = c("fortis", "fuliginosa", "magnirostris", "scandens"), class = "factor"), pc1 = c(0.175880701440334, 0.00718708371839084,0.141108047117647, -0.0241407292755287, -0.362347619490667, -0.278187055817663,-0.322472422874688, -0.342113759548994, -0.0480003258625404,0.471768235224601, -0.324560745197095, 0.0893840127998557, 0.392067958177292,0.333197422567793, 0.143274241985899, 0.39728316736576, 0.107258309440993,0.172013966873444, 0.198033002646736, 0.0233433518931576, -0.379151278648175,-0.360331402784382, 0.0815105012533928, 0.4916774405792, -0.325531606767521,0.0464793855349116, 0.128993599551295, 0.0393187306328187, 0.116498023384732,0.0585444918583008, 0.0519773823187942, 0.117485670789894, 0.141592582273004,0.0866016090395172, -0.353101745830432, 0.0903683502030376, -0.0766571214760896,0.0189849871337894, 0.0284234379094188, -0.074411018513597, -0.125981989564305,-0.04066896524291, 0.0513708917900996, -0.384362095569569, 0.133461942504857,-0.32950028028642, -0.0970510208736005, 0.169708833257483, -0.363153793934809,-0.358442393985438, 0.0823660510982192, 0.14891498101178, 0.0874718551667044,-0.286609834093365, 0.247017305539772, -0.42431120384093, -0.323957076921413,0.120304498088591, 0.0372009683336541, -0.334862217128121, 0.0850391283675992,0.426550700956589, 0.053540404847934, 0.114569082118706, 0.145035302093536,0.462956587489796, -0.352558028645024, -0.370105398490897, 0.249974349261361,-0.374913268845847, 0.209780781689884, 0.313250151589845, 0.46260008422501,-0.304611304484123, 0.11736172451962, -0.35863773173462, -0.391035427221015,0.219372693586083, -0.373985839773145, 0.28640321397829, -0.319643095574694,0.0125879234209831, 0.182454650537706, -0.0307250825972499, -0.32490678343306,-0.341204851832981, 0.314073748792412, -0.364615463916348, -0.0644240574912661,-0.267640246495039, 0.10370599000585, -0.288131406123636, 0.0357411052061282,0.295614964446489, -0.0145385512772513, -0.0451979384514853,0.190115107687624, 0.159441037623466, 0.0550870424124392, 0.0582226744080579), pc2 = c(-1.01095247497725, -1.03868939268555, 0.217310975677827,0.0285247896165632, 0.0526206694724207, 0.029933782968998, 0.0777356682984891,0.178400497047045, -0.895131692154304, 0.209867904648101, -0.0527418216237663,0.00827859255924409, 0.112996963663788, -0.0395108234571918,0.173676295351724, 0.203897905654255, -0.936940800121312, -1.04245666692378,0.171077913138838, -0.164692367490732, 0.0227473300072106, 0.108660664812142,-0.0570692402038391, 0.219114322364657, -0.00559526046181254,-0.0904496365732674, 0.0329879550738144, -0.0513100262471313,0.157624496486177, -0.430836781866961, 0.0336830138484876, -0.997472053889813,-0.151743057518861, 0.153748243948929, -0.0290891308461303, 0.00866038555153437,0.131519041243216, -0.0113322871452352, -0.487378228261218, -0.0178833351102055,0.0262770136476736, -0.0671756888678338, 0.190653963041647, 0.0874833382301275,-0.0729306295513451, -0.114781088459982, 0.176113469790657, 0.229289749785351,0.023115521362388, 0.0124139031005011, 0.00629127323542669, 0.229545586035766,-0.643425633985522, -0.119025249254049, 0.222273563398108, 0.0949392931025451,-0.103328613004053, 0.0497069994557915, 0.0169108098226666, 0.0176907608810171,0.0525638095222423, 0.0991718002465503, 0.031701514651561, 0.194031271868605,0.00563908525013029, 0.144806228737922, 0.145921630779316, 0.164295633824383,-0.0579825386055256, 0.104068297238545, 0.204915386707032, 0.153880371324229,0.0676594796683301, 0.183052585806673, 0.113255499327757, 0.107866805397445,0.142039558115177, 0.0274014273919194, 0.133609276043029, 0.023767214013592,0.0322573857202049, 0.0409388634816843, 0.0643799435826686, -0.850272489901295,0.0430623373727956, 0.0213513249227984, 0.112589167129505, 0.0764778027855769,-0.0187866951639582, 0.0514999426382286, -0.141852017637047,0.132798155087113, -0.811488800456735, 0.18297353727076, 0.00129211340539928,-0.0604306388888919, 0.39467615944551, 0.0406033888777663, -0.0115831761153328,-0.190035979057187)), .Names = c("phi", "sp", "pc1", "pc2"), row.names = c("phi[1245,12]","phi[1058,12]", "phi[594,12]", "phi[1999,12]", "phi[1546,12]","phi[353,12]", "phi[312,12]", "phi[21,12]", "phi[1371,12]", "phi[1874,12]","phi[384,12]", "phi[124,12]", "phi[2085,12]", "phi[163,12]","phi[221,12]", "phi[1321,12]", "phi[1767,12]", "phi[1883,12]","phi[490,12]", "phi[225,12]", "phi[1719,12]", "phi[1613,12]","phi[268,12]", "phi[2132,12]", "phi[1458,12]", "phi[1173,12]","phi[1335,12]", "phi[1357,12]", "phi[388,12]", "phi[985,12]","phi[184,12]", "phi[945,12]", "phi[2143,12]", "phi[1273,12]","phi[1738,12]", "phi[2081,12]", "phi[822,12]", "phi[1236,12]","phi[2044,12]", "phi[2018,12]", "phi[1065,12]", "phi[314,12]","phi[943,12]", "phi[514,12]", "phi[448,12]", "phi[1535,12]","phi[1798,12]", "phi[960,12]", "phi[22,12]", "phi[128,12]", "phi[190,12]","phi[2037,12]", "phi[772,12]", "phi[1553,12]", "phi[417,12]","phi[1659,12]", "phi[1529,12]", "phi[1369,12]", "phi[2075,12]","phi[1722,12]", "phi[712,12]", "phi[80,12]", "phi[1050,12]","phi[1877,12]", "phi[1195,12]", "phi[1138,12]", "phi[1549,12]","phi[1886,12]", "phi[90,12]", "phi[1990,12]", "phi[423,12]","phi[783,12]", "phi[165,12]", "phi[1975,12]", "phi[951,12]","phi[1681,12]", "phi[1647,12]", "phi[1286,12]", "phi[1666,12]","phi[1029,12]", "phi[1989,12]", "phi[668,12]", "phi[1859,12]","phi[763,12]", "phi[879,12]", "phi[1639,12]", "phi[839,12]","phi[1366,12]", "phi[731,12]", "phi[34,12]", "phi[250,12]", "phi[25,12]","phi[457,12]", "phi[465,12]", "phi[1010,12]", "phi[1388,12]","phi[2055,12]", "phi[917,12]", "phi[188,12]", "phi[130,12]"), class = "data.frame")库(scatterplot3d)#http://www.statmethods.net/graphs/scatterplot.html图书馆(rgl)图书馆(akima)sp= c("fortis","fuliginosa","magnirostris","scandens")open3d()par3d(windowRect = c(10, 10, 600, 600))plot3d(x = df3d$pc1,y = df3d$pc2,z = df3d$pcol=c("#FF3030","#9ACD31", "#1D90FF", "#FF8001")[(as.factor(df3d$sp))],xlab = "PC1",ylab = "PC2",zlab = "健身",类型 = "p",# size = round(as.numeric(df3d$z.mean)),main = "哟")for(j in 1:length(sp)){df3d.sp = df3d[df3d$sp == sp[j],]if(nrow(df3d.sp) == 1){next} else{s = interp(df3d.sp$pc1,df3d.sp$pc2,df3d.sp$p重复=条")z = s$z*2zlim <- 范围(df3d$phi)zlen <- zlim[2] - zlim[1] + 1colorlut <- heat.colors(zlen) # 高度颜色查找表col <- colorlut[ z-zlim[1]+1 ] # 为每个点的高度分配颜色surface3d(s$x,s$y,s$z,color=col, alpha = 0.5)}}
我能做的最好的事情是这样的:
for(j in 1:length(sp)){df3d.sp = df3d[df3d$sp == sp[j],]if(nrow(df3d.sp) == 1){next} else{s = interp(df3d.sp$pc1,df3d.sp$pc2,df3d.sp$p重复=条")rbPal <- colorRampPalette(c('yellow','red'))nb.div = 10data.col =as.data.frame(matrix(as.factor(cut(s$z,breaks = nb.div)),暗淡(s$z)[1],暗淡(s$z)[2]))col.index=matrix(as.numeric(unlist(data.col)),暗淡(s$z)[1],暗淡(s$z)[2])Col
问题是颜色没有从红色变为黄色 (0->1).它们是随机关联的:
此外,颜色不限于介于 0 和 1 之间.
我怎么能这样做?
我刚刚尝试了一个新代码,它似乎可以工作,但不能使用我拥有的数据.
库(scatterplot3d)图书馆(rgl)图书馆(akima)x = 范数(100)y = 范数(100)z1 = -x^2-y^2+x^3expit <- 函数(x) 1/(1+exp(-x))logit <- function(x) log(x/(1-x))z = 出口(z1+1)plot3d(x = x,y = y,z = z,col="红色",xlab = "PC1",ylab = "PC2",zlab = "健身",类型 = "p",# size = round(as.numeric(df3d$z.mean)),main = "哟")s = interp(x,是,z,重复=条")rbPal <- colorRampPalette(c('red','yellow'))nb.div = 10data.col = as.data.frame(matrix(as.factor(cut(s$z,breaks = nb.div)),暗淡(s$z)[1],暗淡(s$z)[2]))col.index = matrix(as.numeric(unlist(data.col)),暗淡(s$z)[1],暗淡(s$z)[2])Col
为什么那个会起作用?
我找到了答案.我需要对切割值进行排序,然后用颜色重新映射范围的值.不优雅,但工作......
data.col = as.data.frame(matrix(as.factor(cut(s$z,ordered_result = T,include.lowest = TRUE,正确 = 真,休息 = nb.div)),暗淡(s$z)[1],暗淡(s$z)[2],byrow = FALSE))范围 = 水平(cut(s$z,ordered_result = T,include.lowest = TRUE,正确 = 真,休息时间 = nb.div))图书馆(plyr)for(i in 1:ncol(data.col)){data.col[,i] <- mapvalues(data.col[,i],从=范围,to=rbPal(nb.div),警告丢失 = FALSE)}
I've seen many posts (here, here, here, and here) on how to add color gradient on the Z axis (but none on "z" values that range from 0 to 1). The only thing is that when I do this, I end up with only two colors if my data on the Z axis is between 0 and 1.
Here is an example:
I would like to have a figure where the Z axis is show a red color when it's near 0 and yellow when it's near 1.
The other problem is that I have a bunch of NA's in the Z axis because I'm defining the surface for only the x and y values that correspond to the points. Usually, people use "outer(x,y,f)" to compute the surface. I don't have an equation where I can just plug the numbers.
Is there a way that I can do this?
df3d = structure(list(phi = c(0.714779631270897, 0.687691682891498,
0.596648688803568, 0.573930669753368, 0.742367142156744, 0.647098819439728,
0.695488766544905, 0.728284245613654, 0.688278993976676, 0.692076206940355,
0.721356887106184, 0.551532807978921, 0.54294513452377, 0.529948458419129,
0.583705941140962, 0.556086109758564, 0.721770088612814, 0.711284095827769,
0.573741332655988, 0.527342613188125, 0.762709309318822, 0.740228675759072,
0.539713252759555, 0.696487636519962, 0.709494568163841, 0.537216639879562,
0.551801008711386, 0.545341937291782, 0.584139265723182, 0.64967079561165,
0.562544215947123, 0.716870075612315, 0.523337825235807, 0.588702763971338,
0.744644767844755, 0.551489639273234, 0.617165392352849, 0.556723007149084,
0.66554863194508, 0.570156474465965, 0.59324644850682, 0.552326531317577,
0.607405070778153, 0.765602115588822, 0.532910404322836, 0.749202895901834,
0.638084894011913, 0.594508381800896, 0.745877525852658, 0.742265176757939,
0.55200104972317, 0.598724220429779, 0.704160605412078, 0.709273655686999,
0.57882815350951, 0.80558646355475, 0.739236441867173, 0.556469513099474,
0.560730917777703, 0.715514054617767, 0.562095774851614, 0.540152840905987,
0.561824376055385, 0.595049050758879, 0.544700858333275, 0.54379044778355,
0.735023707587803, 0.75761987117526, 0.529370104304623, 0.756142990929929,
0.580486562475464, 0.555099817471069, 0.537232767721754, 0.68405457472067,
0.572070245916932, 0.73826438688156, 0.776877621879421, 0.5417182204358,
0.757617713719944, 0.536922997394714, 0.695880672257972, 0.570816629701256,
0.551885077056955, 0.697426644089613, 0.700677930911186, 0.722074526398648,
0.547841598427244, 0.744115961419341, 0.568163711481982, 0.631039420851915,
0.52569185852275, 0.655488455712025, 0.715875702650255, 0.562828009151803,
0.565017441865273, 0.554557230119741, 0.641911755728664, 0.549787832704858,
0.551682550480448, 0.522229525069209), sp = structure(c(4L, 4L,
1L, 1L, 2L, 2L, 2L, 2L, 4L, 3L, 2L, 1L, 1L, 1L, 1L, 1L, 4L, 4L,
1L, 1L, 2L, 2L, 1L, 3L, 2L, 1L, 1L, 1L, 1L, 4L, 1L, 4L, 1L, 1L,
2L, 1L, 1L, 1L, 4L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L,
1L, 1L, 4L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L,
1L, 4L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 4L, 1L, 1L, 1L, 1L, 1L,
1L, 1L), .Label = c("fortis", "fuliginosa", "magnirostris", "scandens"
), class = "factor"), pc1 = c(0.175880701440334, 0.00718708371839084,
0.141108047117647, -0.0241407292755287, -0.362347619490667, -0.278187055817663,
-0.322472422874688, -0.342113759548994, -0.0480003258625404,
0.471768235224601, -0.324560745197095, 0.0893840127998557, 0.392067958177292,
0.333197422567793, 0.143274241985899, 0.39728316736576, 0.107258309440993,
0.172013966873444, 0.198033002646736, 0.0233433518931576, -0.379151278648175,
-0.360331402784382, 0.0815105012533928, 0.4916774405792, -0.325531606767521,
0.0464793855349116, 0.128993599551295, 0.0393187306328187, 0.116498023384732,
0.0585444918583008, 0.0519773823187942, 0.117485670789894, 0.141592582273004,
0.0866016090395172, -0.353101745830432, 0.0903683502030376, -0.0766571214760896,
0.0189849871337894, 0.0284234379094188, -0.074411018513597, -0.125981989564305,
-0.04066896524291, 0.0513708917900996, -0.384362095569569, 0.133461942504857,
-0.32950028028642, -0.0970510208736005, 0.169708833257483, -0.363153793934809,
-0.358442393985438, 0.0823660510982192, 0.14891498101178, 0.0874718551667044,
-0.286609834093365, 0.247017305539772, -0.42431120384093, -0.323957076921413,
0.120304498088591, 0.0372009683336541, -0.334862217128121, 0.0850391283675992,
0.426550700956589, 0.053540404847934, 0.114569082118706, 0.145035302093536,
0.462956587489796, -0.352558028645024, -0.370105398490897, 0.249974349261361,
-0.374913268845847, 0.209780781689884, 0.313250151589845, 0.46260008422501,
-0.304611304484123, 0.11736172451962, -0.35863773173462, -0.391035427221015,
0.219372693586083, -0.373985839773145, 0.28640321397829, -0.319643095574694,
0.0125879234209831, 0.182454650537706, -0.0307250825972499, -0.32490678343306,
-0.341204851832981, 0.314073748792412, -0.364615463916348, -0.0644240574912661,
-0.267640246495039, 0.10370599000585, -0.288131406123636, 0.0357411052061282,
0.295614964446489, -0.0145385512772513, -0.0451979384514853,
0.190115107687624, 0.159441037623466, 0.0550870424124392, 0.0582226744080579
), pc2 = c(-1.01095247497725, -1.03868939268555, 0.217310975677827,
0.0285247896165632, 0.0526206694724207, 0.029933782968998, 0.0777356682984891,
0.178400497047045, -0.895131692154304, 0.209867904648101, -0.0527418216237663,
0.00827859255924409, 0.112996963663788, -0.0395108234571918,
0.173676295351724, 0.203897905654255, -0.936940800121312, -1.04245666692378,
0.171077913138838, -0.164692367490732, 0.0227473300072106, 0.108660664812142,
-0.0570692402038391, 0.219114322364657, -0.00559526046181254,
-0.0904496365732674, 0.0329879550738144, -0.0513100262471313,
0.157624496486177, -0.430836781866961, 0.0336830138484876, -0.997472053889813,
-0.151743057518861, 0.153748243948929, -0.0290891308461303, 0.00866038555153437,
0.131519041243216, -0.0113322871452352, -0.487378228261218, -0.0178833351102055,
0.0262770136476736, -0.0671756888678338, 0.190653963041647, 0.0874833382301275,
-0.0729306295513451, -0.114781088459982, 0.176113469790657, 0.229289749785351,
0.023115521362388, 0.0124139031005011, 0.00629127323542669, 0.229545586035766,
-0.643425633985522, -0.119025249254049, 0.222273563398108, 0.0949392931025451,
-0.103328613004053, 0.0497069994557915, 0.0169108098226666, 0.0176907608810171,
0.0525638095222423, 0.0991718002465503, 0.031701514651561, 0.194031271868605,
0.00563908525013029, 0.144806228737922, 0.145921630779316, 0.164295633824383,
-0.0579825386055256, 0.104068297238545, 0.204915386707032, 0.153880371324229,
0.0676594796683301, 0.183052585806673, 0.113255499327757, 0.107866805397445,
0.142039558115177, 0.0274014273919194, 0.133609276043029, 0.023767214013592,
0.0322573857202049, 0.0409388634816843, 0.0643799435826686, -0.850272489901295,
0.0430623373727956, 0.0213513249227984, 0.112589167129505, 0.0764778027855769,
-0.0187866951639582, 0.0514999426382286, -0.141852017637047,
0.132798155087113, -0.811488800456735, 0.18297353727076, 0.00129211340539928,
-0.0604306388888919, 0.39467615944551, 0.0406033888777663, -0.0115831761153328,
-0.190035979057187)), .Names = c("phi", "sp", "pc1", "pc2"), row.names = c("phi[1245,12]",
"phi[1058,12]", "phi[594,12]", "phi[1999,12]", "phi[1546,12]",
"phi[353,12]", "phi[312,12]", "phi[21,12]", "phi[1371,12]", "phi[1874,12]",
"phi[384,12]", "phi[124,12]", "phi[2085,12]", "phi[163,12]",
"phi[221,12]", "phi[1321,12]", "phi[1767,12]", "phi[1883,12]",
"phi[490,12]", "phi[225,12]", "phi[1719,12]", "phi[1613,12]",
"phi[268,12]", "phi[2132,12]", "phi[1458,12]", "phi[1173,12]",
"phi[1335,12]", "phi[1357,12]", "phi[388,12]", "phi[985,12]",
"phi[184,12]", "phi[945,12]", "phi[2143,12]", "phi[1273,12]",
"phi[1738,12]", "phi[2081,12]", "phi[822,12]", "phi[1236,12]",
"phi[2044,12]", "phi[2018,12]", "phi[1065,12]", "phi[314,12]",
"phi[943,12]", "phi[514,12]", "phi[448,12]", "phi[1535,12]",
"phi[1798,12]", "phi[960,12]", "phi[22,12]", "phi[128,12]", "phi[190,12]",
"phi[2037,12]", "phi[772,12]", "phi[1553,12]", "phi[417,12]",
"phi[1659,12]", "phi[1529,12]", "phi[1369,12]", "phi[2075,12]",
"phi[1722,12]", "phi[712,12]", "phi[80,12]", "phi[1050,12]",
"phi[1877,12]", "phi[1195,12]", "phi[1138,12]", "phi[1549,12]",
"phi[1886,12]", "phi[90,12]", "phi[1990,12]", "phi[423,12]",
"phi[783,12]", "phi[165,12]", "phi[1975,12]", "phi[951,12]",
"phi[1681,12]", "phi[1647,12]", "phi[1286,12]", "phi[1666,12]",
"phi[1029,12]", "phi[1989,12]", "phi[668,12]", "phi[1859,12]",
"phi[763,12]", "phi[879,12]", "phi[1639,12]", "phi[839,12]",
"phi[1366,12]", "phi[731,12]", "phi[34,12]", "phi[250,12]", "phi[25,12]",
"phi[457,12]", "phi[465,12]", "phi[1010,12]", "phi[1388,12]",
"phi[2055,12]", "phi[917,12]", "phi[188,12]", "phi[130,12]"), class = "data.frame")
library(scatterplot3d) #http://www.statmethods.net/graphs/scatterplot.html
library(rgl)
library(akima)
sp= c("fortis","fuliginosa","magnirostris","scandens")
open3d()
par3d(windowRect = c(10, 10, 600, 600))
plot3d(x = df3d$pc1,
y = df3d$pc2,
z = df3d$phi,
col=c("#FF3030","#9ACD31", "#1D90FF", "#FF8001")[(as.factor(df3d$sp))],
xlab = "PC1",
ylab = "PC2",
zlab = "Fitness",
type = "p",
# size = round(as.numeric(df3d$z.mean)),
main = "yo")
for(j in 1:length(sp)){
df3d.sp = df3d[df3d$sp == sp[j],]
if(nrow(df3d.sp) == 1){next} else{
s = interp(df3d.sp$pc1,
df3d.sp$pc2,
df3d.sp$phi,
duplicate="strip")
z = s$z*2
zlim <- range(df3d$phi)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- heat.colors(zlen) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights for each point
surface3d(s$x,s$y,s$z,color=col, alpha = 0.5)
}
}
The best I could do is something like this:
for(j in 1:length(sp)){
df3d.sp = df3d[df3d$sp == sp[j],]
if(nrow(df3d.sp) == 1){next} else{
s = interp(df3d.sp$pc1,
df3d.sp$pc2,
df3d.sp$phi,
duplicate="strip")
rbPal <- colorRampPalette(c('yellow','red'))
nb.div = 10
data.col =as.data.frame(matrix(as.factor(cut(s$z,breaks = nb.div)),
dim(s$z)[1],dim(s$z)[2]))
col.index=matrix(as.numeric(unlist(data.col)),
dim(s$z)[1],dim(s$z)[2])
Col <- rbPal(nb.div)[col.index]
col= matrix(Col,dim(s$z)[1],dim(s$z)[2])
surface3d(s$x,s$y,s$z,color=col, alpha = 0.5)
}
}
The problem is that the colors are not going from red to yellow (0->1). They are randomly associated:
Also, the colors are not constrained to be between 0 and 1.
How could I do this?
I've just tried a new code and it seems to work, but not with the data that I have.
library(scatterplot3d)
library(rgl)
library(akima)
x = rnorm(100)
y = rnorm(100)
z1 = -x^2-y^2+x^3
expit <- function(x) 1/(1+exp(-x))
logit <- function(x) log(x/(1-x))
z = expit(z1+1)
plot3d(x = x,
y = y,
z = z,
col="red",
xlab = "PC1",
ylab = "PC2",
zlab = "Fitness",
type = "p",
# size = round(as.numeric(df3d$z.mean)),
main = "yo")
s = interp(x,
y,
z,
duplicate="strip")
rbPal <- colorRampPalette(c('red','yellow'))
nb.div = 10
data.col = as.data.frame(matrix(as.factor(cut(s$z, breaks = nb.div)),
dim(s$z)[1],dim(s$z)[2]))
col.index = matrix(as.numeric(unlist(data.col)),
dim(s$z)[1],dim(s$z)[2])
Col <- rbPal(nb.div)[col.index]
col= matrix(Col, dim(s$z)[1], dim(s$z)[2])
surface3d(s$x,s$y,s$z,color=col, alpha = 1)
Why would that one work?
I found the answer. I needed to order the cut values and then remap the values of the range with the colors. Not elegant, but working...
data.col = as.data.frame(matrix(as.factor(cut(s$z,ordered_result = T,
include.lowest = TRUE,
right = TRUE,
breaks = nb.div)),
dim(s$z)[1],
dim(s$z)[2],byrow = FALSE))
range = levels(cut(s$z,ordered_result = T,
include.lowest = TRUE,
right = TRUE,
breaks = nb.div))
library(plyr)
for(i in 1:ncol(data.col)){
data.col[,i] <- mapvalues(data.col[,i],
from=range,
to=rbPal(nb.div),
warn_missing = FALSE)
}
这篇关于当 Z 轴介于 0 和 1 之间时,如何向 R 中的 Surface3d 添加渐变颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!