我正在一台机器上运行样本,我的输出是无单位系数y
与速度x
的关系图。我改变了给定化合物的浓度,以发现曲线如何根据浓度z
而变化。是否有一个软件包可以绘制以这种方式设置的3d图形数据(即序列)?
我发现rstudio中3d绘图的常用软件包(点阵,scatterplot3d,rgl等)似乎仅在变量大小相等的向量(即每个点是一个样本)时才起作用:
我的数据看起来更像这样,其中每个“切片”在z轴上可以表示一个样本:
我可以使用曲面图在Excel中相当轻松地将其绘制出来,但是其中的图既肮脏,丑陋又不灵活。
我想要的图表的最佳示例是:
以下是我的数据示例。第一列包含x值(速度),第一列包含z值(浓度),其他所有内容均为y值(任意无单位系数)。因此,第一个单元格(0)不是数据的一部分。
structure(list(...1 = c(0, 1.17721e-08, 1.48056166666667e-08,
1.86639666666667e-08, 2.35371333333333e-08, 2.96521333333333e-08
), ...2 = c(0.3, 0.000326036, 0.000789132, 0.00132642, 0.00196508,
0.00272198), ...3 = c(3, 0.00038811, 0.000915256, 0.00152748,
0.00224812, 0.00311174), ...4 = c(6, 0.000289036, 0.000692406,
0.00115582, 0.00169984, 0.00234574), ...5 = c(15, 0.000266082,
0.000647076, 0.00109054, 0.00161336, 0.00224112), ...6 = c(30,
0.000361498, 0.000818448, 0.00134682, 0.00196732, 0.00271138),
...7 = c(100, 0.000296934, 0.000714832, 0.0012111, 0.0018063,
0.0025273)), row.names = c(NA, -6L), class = c("tbl_df",
"tbl", "data.frame"))
我将'dput()'存储为'example.data',并运行以下命令以获得此错误消息:
#Store x and y as vectors, z as matrix
> x <- c(example.data[-1,1])
> y <- c(example.data[1,-1])
> z <- as.matrix(example.data[-1,-1], nrow = 5, ncol = 6)
> persp3d(x, z, y)
Error in rgl.surface(x = NULL, y = list(...2 = 0.3, ...3 = 3, ...4 = 6, :
'y' length != 'x' rows * 'z' cols
我在这里做错了什么? x和y分别具有与矩阵z相同的行数和列数
答案 0 :(得分:0)
使用示例数据:
dat <- structure(list(...1 = c(0, 1.17721e-08, 1.48056166666667e-08,
1.86639666666667e-08, 2.35371333333333e-08, 2.96521333333333e-08
), ...2 = c(0.3, 0.000326036, 0.000789132, 0.00132642, 0.00196508,
0.00272198), ...3 = c(3, 0.00038811, 0.000915256, 0.00152748,
0.00224812, 0.00311174), ...4 = c(6, 0.000289036, 0.000692406,
0.00115582, 0.00169984, 0.00234574), ...5 = c(15, 0.000266082,
0.000647076, 0.00109054, 0.00161336, 0.00224112), ...6 = c(30,
0.000361498, 0.000818448, 0.00134682, 0.00196732, 0.00271138),
...7 = c(100, 0.000296934, 0.000714832, 0.0012111, 0.0018063,
0.0025273)), row.names = c(NA, -6L), class = c("tbl_df",
"tbl", "data.frame"))
通常最好将数据保留为matrix
,并为此将x
,y
和z
分开。您的初始子集本来可以工作,除了tibble
故意使它像frame
一样,而不是“正常” data.frame
的单列/行子集及其对{ {3}}以避免类转换。
x <- dat[-1,1][[1]]
y <- as.numeric(dat[1,-1])
z <- as.matrix(dat[-1,-1])
rgl::persp3d(x,y,z)
您还可以先转换为matrix
,这样您在这里就不会受到tibble
的保护。
dat <- as.matrix(dat)
x <- dat[-1,1]
y <- dat[1,-1]
z <- dat[-1,-1]