【问题标题】:Set default plot attributes for a dataframe设置数据框的默认绘图属性
【发布时间】:2016-04-18 06:31:11
【问题描述】:
许多包都包含数据帧,其中 plot(df) 产生特定的输出。例如。 nlme 包含 'Dialyzer' 数据框,它在 plot(Dialyzer) 上使用格子(格子包)生成一个图,其中代码实际上是:
dotplot(rate ~ pressure | Subject, data="Dialyzer")
此代码似乎包含在 dataframes 属性中:任何人都可以为我提供指南或包含有关如何设置 dataframe 的默认绘图的指南吗?
【问题讨论】:
标签:
r
plot
dataframe
default
lattice
【解决方案1】:
这是由对象的类决定的。注意 Dialyzer "data.frame" 的类。
> class(Dialyzer)
[1] "nfnGroupedData" "nfGroupedData" "groupedData" "data.frame"
当你调用 plot 时,它会遍历这个类的条目并尝试找到plot.* 方法。使用它找到的第一个。如果一切都失败了,总会有data.frame。
> methods("plot")
[1] plot.acf* plot.ACF* plot.augPred* plot.compareFits* plot.data.frame*
[6] plot.decomposed.ts* plot.default plot.dendrogram* plot.density* plot.ecdf
[11] plot.factor* plot.formula* plot.function plot.gls* plot.hclust*
[16] plot.histogram* plot.HoltWinters* plot.intervals.lmList* plot.isoreg* plot.lm*
[21] plot.lme plot.lmList* plot.medpolish* plot.mlm* plot.nffGroupedData*
[26] plot.nfnGroupedData* plot.nls* plot.nmGroupedData* plot.pdMat* plot.ppr*
[31] plot.prcomp* plot.princomp* plot.profile.nls* plot.ranef.lme* plot.ranef.lmList*
[36] plot.raster* plot.shingle* plot.simulate.lme* plot.spec* plot.stepfun
[41] plot.stl* plot.table* plot.trellis* plot.ts plot.tskernel*
[46] plot.TukeyHSD* plot.Variogram*
如果您想使用特定方法,可以使用plot.* 显式调用它,例如plot.default.
【解决方案2】:
R 是多态的。这意味着相同的功能可以导致对不同类别的对象进行不同的操作。您可以将plot() 应用于许多不同类型的对象,每个对象都会得到不同类型的图。例如,print()、summary() 和许多其他人也可以这样说。
多态性使事情更容易记住。如果一个函数对你来说是新的,只需尝试在函数的输出上运行plot();它可能会起作用。如果您是程序员,多态性允许编写相当通用的代码,而不必担心正在操作什么类型的对象,因为底层的类机制会处理这些问题。
与多态一起工作的函数,例如plot()和print(),
被称为通用。当调用泛型函数时,R 会将调用传递给相关类方法:它将调用重新路由到为特定对象的类定义的函数。