当 Z 轴介于 0 和 1 之间时,如何向 R 中的 Surface3d 添加渐变颜色

博索莱先生

我看过很多关于如何在 Z 轴上添加颜色渐变的帖子(这里这里这里这里)(但没有关于范围从 0 到 1 的“z”值)。唯一的问题是,当我这样做时,如果 Z 轴上的数据介于 0 和 1 之间,我最终只会得到两种颜色。

下面是一个例子: 在此处输入图片说明

我想要一个图形,其中 Z 轴在接近 0 时显示红色,在接近 1 时显示黄色。

另一个问题是我在 Z 轴上有一堆 NA,因为我只为与这些点对应的 x 和 y 值定义了表面。通常,人们使用“outer(x,y,f)”来计算表面。我没有一个方程式可以让我插入数字。

有没有办法做到这一点?

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

我能做的最好的事情是这样的:

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

问题是颜色不会从红色变为黄色 (0->1)。它们是随机关联的:

在此处输入图片说明

此外,颜色不限于介于 0 和 1 之间。

我怎么能这样做?

我刚刚尝试了一个新代码,它似乎有效,但不适用于我拥有的数据。

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)

在此处输入图片说明

为什么那一个会起作用?

博索莱先生

我找到了答案。我需要对切割值进行排序,然后用颜色重新映射范围的值。不优雅,但工作...

 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)

      }

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将3d坐标向量归一化为介于0和1之间

来自分类Dev

将3d坐标向量归一化为介于0和1之间

来自分类Dev

当预期浮点值介于 0 和 1 之间时,TensorFlow MLP 始终返回 0 或 1

来自分类Dev

IE10中介于0%和负%之间的translation3d

来自分类Dev

删除列中R的值介于-1和1之间的行

来自分类Dev

如何在 Unity3D 中在 X 轴和 Z 轴上进行拖放?

来自分类Dev

Javascript随机数介于0和1之间

来自分类Dev

查找NA介于0和1之间的行

来自分类Dev

Javascript随机数介于0和1之间

来自分类Dev

在绘制R中的变异函数时,z〜1和z〜LON + LAT有什么区别?

来自分类Dev

如何获得介于0和1之间的S形函数以得到正确答案的概率?

来自分类Dev

如何将随机整数转换为介于0和1之间的float

来自分类Dev

如何在JavaScript中将任何数字范围缩放到介于0和1之间的值

来自分类Dev

当X的值介于y和z之间时,如何获取X的值?

来自分类Dev

确保百分比介于 0 和 1 之间,包括(使用单个函数)

来自分类Dev

如何使用OpenMP在C代码中生成介于0和1之间的均匀分布的随机数?

来自分类Dev

R:给定矩阵0和1s,创建矩阵,显示行中列之间的重复

来自分类Dev

如何在R中以0和1填充数据集以匹配行列中的值?

来自分类Dev

断言错误:设备索引超出范围(0个可用设备;设备索引应介于0和-1之间(包括0和-1)

来自分类Dev

R z轴和同构图上的3D散点图

来自分类Dev

如何在ggridges的ridgeplot中添加垂直颜色渐变?

来自分类Dev

如何在Slider中添加线性渐变颜色?

来自分类Dev

如何在 UINavigationBar 中添加垂直渐变颜色?

来自分类Dev

如何用1和0覆盖R中的一列字符?

来自分类Dev

我将如何逆转R中矩阵的二进制数字(0和1)?

来自分类Dev

如何在r中将数据框中的记录转换为0和1?

来自分类Dev

如何在R中更改bplot中的颜色渐变

来自分类Dev

R嵌套填充颜色和渐变颜色

来自分类Dev

Oracle认证(OCA JP-1z0 803和OCPJP-1z0 804)

Related 相关文章

  1. 1

    将3d坐标向量归一化为介于0和1之间

  2. 2

    将3d坐标向量归一化为介于0和1之间

  3. 3

    当预期浮点值介于 0 和 1 之间时,TensorFlow MLP 始终返回 0 或 1

  4. 4

    IE10中介于0%和负%之间的translation3d

  5. 5

    删除列中R的值介于-1和1之间的行

  6. 6

    如何在 Unity3D 中在 X 轴和 Z 轴上进行拖放?

  7. 7

    Javascript随机数介于0和1之间

  8. 8

    查找NA介于0和1之间的行

  9. 9

    Javascript随机数介于0和1之间

  10. 10

    在绘制R中的变异函数时,z〜1和z〜LON + LAT有什么区别?

  11. 11

    如何获得介于0和1之间的S形函数以得到正确答案的概率?

  12. 12

    如何将随机整数转换为介于0和1之间的float

  13. 13

    如何在JavaScript中将任何数字范围缩放到介于0和1之间的值

  14. 14

    当X的值介于y和z之间时,如何获取X的值?

  15. 15

    确保百分比介于 0 和 1 之间,包括(使用单个函数)

  16. 16

    如何使用OpenMP在C代码中生成介于0和1之间的均匀分布的随机数?

  17. 17

    R:给定矩阵0和1s,创建矩阵,显示行中列之间的重复

  18. 18

    如何在R中以0和1填充数据集以匹配行列中的值?

  19. 19

    断言错误:设备索引超出范围(0个可用设备;设备索引应介于0和-1之间(包括0和-1)

  20. 20

    R z轴和同构图上的3D散点图

  21. 21

    如何在ggridges的ridgeplot中添加垂直颜色渐变?

  22. 22

    如何在Slider中添加线性渐变颜色?

  23. 23

    如何在 UINavigationBar 中添加垂直渐变颜色?

  24. 24

    如何用1和0覆盖R中的一列字符?

  25. 25

    我将如何逆转R中矩阵的二进制数字(0和1)?

  26. 26

    如何在r中将数据框中的记录转换为0和1?

  27. 27

    如何在R中更改bplot中的颜色渐变

  28. 28

    R嵌套填充颜色和渐变颜色

  29. 29

    Oracle认证(OCA JP-1z0 803和OCPJP-1z0 804)

热门标签

归档