为什么我得到" plot.new尚未被召唤"在chartJSRadar()之后调用legend()

时间:2016-04-06 11:31:51

标签: r legend chart.js

此处的上下文是R Project for Statistical Computing

考虑以下代码(来自chartJSRadar文档)

library(radar chart)
labs <- c("Communicator", "Data Wangler", "Programmer",
      "Technologist",  "Modeller", "Visualizer")

scores <- list(
  "Rich" = c(9, 7, 4, 5, 3, 7),
  "Andy" = c(7, 6, 6, 2, 6, 9),
  "Aimee" = c(6, 5, 8, 4, 7, 6)
)

chartJSRadar(scores = scores, labs = labs, maxScale = 10)

我想在使用中添加一个传奇:

legend("topleft", c("Rich","Andy","Aimee"), cex=0.8, fill=colors)

但是我收到以下错误:

Error in strwidth(legend, units = "user", cex = cex, font = text.font) : 
  plot.new has not been called yet

我已经看到有关此错误消息的许多其他问题。其中一些是因为传说坐标不在图表中。其他一些人给出了解决方法,但没有解释错误发生的原因。

我的问题是:为什么我收到此错误?看起来像图例()和chartJSRadar()之间的不兼容似乎是根本错误的,但是我没有得到它。

请指教!

3 个答案:

答案 0 :(得分:3)

如果使用R Studio,请确保运行整个块(不是ctr + enter)。我有一个类似的问题使用igraph。我试图将图例附加到图表但是有相同的错误消息。运行整个块工作。

答案 1 :(得分:1)

似乎chartJSRadar没有调用绘图,但在查看器中显示了交互式绘图。因此,不会调用绘图,也不能使用legend()。从chartJSRadar的文档中可以看出雷达图有一个图例选项,请参阅http://www.chartjs.org/docs/#radar-chart-chart-options

//String - A legend template
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].strokeColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>"

这是JavaScript,我没有专业知识,所以不幸的是,这是我可以帮助你。

答案 2 :(得分:0)

尝试使用具有fmsb功能的radarchart()包。您可以为您的数据绘制相同的图表。

http://127.0.0.1:25882/library/fmsb/html/radarchart.html

我在R中尝试了它,它在R绘图窗口中工作。由于我不了解雷达图数据。您绝对可以使用包radarchart()

使用legend()fmsb使用图例来完成此操作