将带有斜体的轴标签与 R rgl 包中的轴平行

问题描述

我正在尝试使用 R 包“rgl”创建 3D 绘图。我想让所有轴标签都与轴平行,但是 las = 0 不起作用并且使用 text3d() 或 mtext3d() 没有运气。是否有可能这样做,取决于您所看到的数字?这是我的代码:

X = c(0,0.2,0.4,0.6,0.8,1.0)
Y = c(0,2,4,6,8,10)
Z = c(100,220,440,660,880,1100)
df = data.frame(X,Y,Z)

#install.packages('rgl')
library(rgl)
# Cannot put axis labels parallel to the axes
plot3d(df$X,df$Y,df$Z,type = 'n',box = F,add = F,xlab = 'Number of cars (N)',ylab = 'Size (S)',zlab = 'Weight (kg)')
plot3d(df$X,type = 'l',lwd = 2,add = T,col = 'blue')
rgl.snapshot('Figure1.png')

这就是我尝试尽可能最好地定位轴后得到的结果。

Figure1.png

我什至无法弄清楚这一点,但理想情况下,我想用斜体在括号中制作字母,但它不会让我使用替代品,它被忽略了。这是我的代码:

# Cannot use italics in the labels
plot3d(df$X,xlab = substitute(paste('Number of cars (',italic('N'),')')),ylab = substitute(paste('Size (',italic('S'),col = 'blue')
rgl.snapshot('Figure2.png')

我完全失去了轴标签。

Figure2.png

我花时间搜索示例和文档,但找不到任何方法来更改轴标签的方向或使用斜体。这是我第一次使用 rgl 包,感谢您的帮助!

新编辑:

感谢 user2554330 的回答,标签可以包含斜体,但标签仍然远离轴。以下两个代码都可以工作并生成此图形(我可以在交互式窗口中旋转图形,但任何时候所有标签都不会与每个轴对齐)。

plot3d(df$X,xlab = expression(paste('Number of cars (',ylab = expression(paste('Size (',col = 'blue')
rgl.snapshot('Figure3.png')

plot3d(df$X,xlab = as.expression(substitute(paste('Number of cars (',')'))),ylab = as.expression(substitute(paste('Size (',col = 'blue')
rgl.snapshot('Figure3.png')

Figure3.png

如果我也可以让所有三个轴都在一个角落从 0 开始,那将是理想的,但同样,我无法通过旋转图形来实现。

解决方法

问题是您没有为标签使用字符或表达式向量。您需要使用 expression(),因为 substitute() 生成一个语言对象(它是表达式向量的一个元素)。 (使用您的原始代码,我收到错误 Error in rep(text,len = newlen) : attempt to replicate an object of type 'language' 不要忽略错误消息!)

例如

plot3d(df$X,df$Y,df$Z,type = 'n',box = F,add = F,xlab = expression(paste('Number of cars (',italic('N'),')')),ylab = expression(paste('Size (',italic('S'),zlab = 'Weight (kg)')

如果您确实需要使用 substitute(例如在标签中放置一个值),请将其包裹在 as.expression() 中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...