【问题标题】:R plot3d coloringR plot3d着色
【发布时间】:2017-01-02 14:42:19
【问题描述】:

我正在使用来自rglplot3d() 在数据框中使用三列样本制作3D 散点图。此外,我正在使用我的数据框中的第四列colorby(每个样本取值,例如,10、11、12 作为因子/水平)来为图中的点着色。

当使用plot() 制作二维图时,我首先设置palette(rainbow(3)),然后在plot() 中设置col = colorby,然后是legend()。情节、颜色和图例都很好。

但是,当我重复plot3d() 的最后一部分时,颜色会混合在一起,并且不会将相同的颜色分配到与plot() 相同的级别。此外,如果我使用legend3d("topright", legend = levels(colorby), col = rainbow(3)) 创建图例,它看起来与 2D 图例相同,但在 3D 图中着色明显错误。

我哪里错了?

【问题讨论】:

    标签: r rgl


    【解决方案1】:

    这对我来说是正确的:

    df <- data.frame(x=1:9, y=9:1, z=101:109, colorby=gl(3,3))
    palette(rainbow(3))
    plot(x~y, df, col = df$colorby)
    library(rgl)
    with(df, plot3d(x,y,z, col = colorby))
    legend3d("topright", legend = levels(df$colorby), col = levels(df$colorby), pch=19)
    

    【讨论】:

    • 确实很好用。我注意到对于我的legend3d() 代码,我使用了col = 1:length(df$colorby),它给出了一个不同的不正确的 图例,而不是使用col = levels(df$colorby)。知道为什么吗?
    • 这是两个不同的向量。为什么你会期望它们是一样的?你的给出 1:9,lukeA 给出 c("1", "2", "3")。第二个是字符向量的事实并不重要,它们包含不同值的事实。
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2018-04-14
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多