我正在尝试使用网格库的densityplot功能来显示一些数据.我的数据集非常杂乱,所以我想减少底部绘制的符号的alpha值(这样可以在过度绘图的情况下获得更清晰的视图).但是,我似乎无法改变那些符号的alpha值而不会使实际密度曲线同样不透明.我使用的是图形的par.settings选择和设定不同的值superpose.line和superpose.symbol(和工程变更线的种类及符号,但由于某种原因未阿尔法值).我用虹膜数据集做了一个小例子来说明我的问题/当前的方法.如果有人有任何建议我会非常感激.
library(lattice)
data(iris)
graph.settings <- list(superpose.line = list(lty = 1:3, lwd = 2, alpha = 1),
superpose.symbol = list(pch = 1:3, alpha = 0.3))
densityplot( ~ Sepal.Length, data = iris, groups = Species,
auto.key = list(columns = 3), aspect = 1,
main = "Density Plot of Sepal Lengths", xlab = "Length (mm)",
par.settings = graph.settings)
Run Code Online (Sandbox Code Playgroud)
这是一个快速的解决方案.它的工作原理是提供一个"自定义"面板功能,它可以调用panel.densityplot()两次:第一个调用可以获得地毯点数alpha=0.3; 第二个过度密度曲线alpha=1.
library(lattice)
data(iris)
graph.settings <- list(superpose.line = list(lty = 1:3, lwd = 2),
superpose.symbol = list(pch = 1:3))
densityplot( ~ Sepal.Length, data = iris, groups = Species,
auto.key = list(columns = 3), aspect = 1,
main = "Density Plot of Sepal Lengths", xlab = "Length (mm)",
par.settings = graph.settings,
panel = function(x, ...) {
panel.densityplot(x, ..., alpha = 0.3)
panel.densityplot(x, ..., plot.points=FALSE, alpha = 1)
})
Run Code Online (Sandbox Code Playgroud)