是否有更改 plot.svm 硬编码标题的解决方法?

Posted

技术标签:

【中文标题】是否有更改 plot.svm 硬编码标题的解决方法?【英文标题】:Is there a workaround to change the plot.svm hardcoded title? 【发布时间】:2013-12-04 01:52:29 【问题描述】:

考虑以下代码。我正在尝试传递参数main 将绘图标题更改为“FooBar”,但它似乎被硬编码为“SVM 分类图”。 我还尝试使用函数调用title,但这会产生重叠两个标题的效果,这是更不可取的。有什么解决方法吗?

library(e1071)



pdf("Play.pdf")
# Generate data
set.seed(1)
x=matrix(rnorm(200*2),ncol=2)
x[1:100,]=x[1:100,]+2
x[101:150,]=x[101:150,]-2
y=c(rep(1,150),rep(2,50))
dat=data.frame(x=x,y=as.factor(y))

train=sample(200,100)

svmfit=svm(y~.,data=dat[train,],kernel="radial", cost=1, gamma=1)
plot(svmfit,dat[train,], main="FooBar")

dev.off()

【问题讨论】:

【参考方案1】:

主标题是硬编码的,所以需要修改函数的代码。

为避免弄乱包,我建议在全局环境中创建该函数的副本并使用它。

例如:

myplotSVM <- e1071:::plot.svm
environment(myplotSVM)  <- .GlobalEnv
fix(myplotSVM)

然后把函数定义改成:

function (x, data, formula = NULL, fill = TRUE, grid = 50, slice = list(), 
  symbolPalette = palette(), svSymbol = "x", dataSymbol = "o", 
  main="SVN classification plot", ...) 

然后,在第 56 行

plot.title = title(main = main, # <----- change this part!!! 
                xlab = names(lis)[2], ylab = names(lis)[1]), 
                ...)

因此标题将是 SVN 分类图,或者您提供的任何 main 参数

您现在可以将其用作

myplotSVM(svmfit,dat[train,], main="FooBar")

【讨论】:

是否可以将修改后的函数定义写入某处的文件中,以便以后可以重复使用,而无需每次需要使用时手动编辑代码? @merlin2011:我不知道是否有更合适的方法来做到这一点......但我想你可以复制代码,将其粘贴到新文件中,然后使用@987654326 @ 在脚本的开头。 很公平。我想知道这是否算作一个错误,我应该为它提交一个补丁。 如果你认为你会经常使用它,你可以先加载e1071,然后在.Rprofile中覆盖它。 @Dwin:如何做到这一点?将整个函数粘贴到 .Rprofile 中?【参考方案2】:

在我的例子中,我只是想在标题中添加一些东西,所以这就是我所做的:

plot(smv_model, test_df, battery_power~ram)
title(main= paste("                                      ", "polynomial", sep=" "))

结果如下:

【讨论】:

以上是关于是否有更改 plot.svm 硬编码标题的解决方法?的主要内容,如果未能解决你的问题,请参考以下文章

只能在使用硬编码字符串时更改 UIBarButton 标题

如何仅在 phpunit 测试中更改硬编码的 Eloquent $connection?

如何在 XSLT 条件下更改硬编码元素的位置?

避免硬编码 Hibernate 属性

更改 javascript 文件中的硬编码 ID

开源规则引擎——ice:致力于解决灵活繁复的硬编码问题