RStudio中不推荐使用可打印图表的问题

时间:2019-04-19 18:32:48

标签: r shiny plotly

我试图熟悉plotly的功能和语法,并尝试了提供的几种脚本来构成和渲染数据图。但是,使用RStudio生成绘图输出时,出现以下错误:“警告消息: 现在不建议在layout()中指定宽度/高度。 请在ggplotly()或plot_ly()中指定“

在RStudio控制台中,输出图像显得混乱且无法解释,我尝试了一些更改,例如将plotly对象的宽度和高度设置为null等等,但没有带来任何运气。

这是我遇到此问题时使用的示例脚本之一:

library(plotly)
trace1 <- list(
  x = c("Aug-12", "Sep-12", "Oct-12", "Nov-12", "Dec-12", "Jan-12", "Feb-13", "Mar-13", "Apr-13", "May-13", "Jun-13", "Jul-13"), 
  y = c(65, 77, 112, 279, 172, 133, 152, 106, 79, 225, 99, 150), 
  hoverinfo = "x+y+name", 
  line = list(
    color = "#5BC075", 
    width = "3"
  ), 
  mode = "lines", 
  name = "Median deal size", 
  type = "scatter", 
  uid = "a8e83b", 
  xsrc = "jackluo:508:b357d2", 
  ysrc = "jackluo:508:d19900"
)
trace2 <- list(
  x = c("Aug-12", "Sep-12", "Oct-12", "Nov-12", "Dec-12", "Jan-12", "Feb-13", "Mar-13", "Apr-13", "May-13", "Jun-13", "Jul-13"), 
  y = c(116, 125, 126, 125, 244, 136, 80, 82, 89, 82, 95, 107), 
  hoverinfo = "x+y+name", 
  line = list(
    color = "#CC6E55", 
    width = "3"
  ), 
  mode = "lines", 
  name = "Number of deals", 
  type = "scatter", 
  uid = "2be33b", 
  xsrc = "jackluo:508:b357d2", 
  ysrc = "jackluo:508:5d533d"
)
data <- list(trace1, trace2)
layout <- list(
  autosize = TRUE, 
  font = list(
    family = "Overpass", 
    size = 12
  ), 
  height = 720, 
  legend = list(
    x = 0, 
    y = -0.1, 
    bgcolor = "rgba(255, 255, 255, 0)", 
    orientation = "h"
  ), 
  margin = list(
    r = 40, 
    t = 40, 
    b = 40, 
    l = 40, 
    pad = 2
  ), 
  title = "", 
  width = 1280, 
  xaxis = list(
    autorange = TRUE, 
    nticks = 12, 
    range = c(0, 11), 
    rangemode = "tozero", 
    type = "category"
  ), 
  yaxis = list(
    autorange = TRUE, 
    range = c(0, 293.6842105263158), 
    rangemode = "tozero", 
    type = "linear"
  )
)
p <- plot_ly()
p <- add_trace(p, x=trace1$x, y=trace1$y, hoverinfo=trace1$hoverinfo, line=trace1$line, mode=trace1$mode, name=trace1$name, type=trace1$type, uid=trace1$uid, xsrc=trace1$xsrc, ysrc=trace1$ysrc)
p <- add_trace(p, x=trace2$x, y=trace2$y, hoverinfo=trace2$hoverinfo, line=trace2$line, mode=trace2$mode, name=trace2$name, type=trace2$type, uid=trace2$uid, xsrc=trace2$xsrc, ysrc=trace2$ysrc)
p <- layout(p, autosize=layout$autosize, font=layout$font, height=layout$height, legend=layout$legend, margin=layout$margin, title=layout$title, width=layout$width, xaxis=layout$xaxis, yaxis=layout$yaxis)
p$x$layout$width <- NULL
p$x$layout$height <- NULL
p$width <- NULL
p$height <- NULL
p

为解决此问题提供的任何帮助,使图表能够正确缩放和清晰易读,将不胜感激!

2 个答案:

答案 0 :(得分:0)

enter image description here

按照@NoahOlsen的建议,您需要将x轴值设置为日期格式

trace1$x <- as.Date(paste0("01-", trace1$x), format = "%d-%b-%y")
trace2$x <- as.Date(paste0("01-", trace2$x), format = "%d-%b-%y")

说明

as.Date()尝试将输入格式化为日期对象。它适用于ISO日期字符串(例如2019-04-21),但在处理更复杂的格式时需要一些帮助。

来自?strptime

%d - Day of the month as decimal number (01–31).
%b - Abbreviated month name in the current locale on this platform. (Also matches full name on input: in some locales there are no abbreviations of names.)
%Y - Year with century. Note that whereas there was no zero in the original Gregorian calendar, ISO 8601:2004 defines it to be valid (interpreted as 1BC): see https://en.wikipedia.org/wiki/0_(year). Note that the standards also say that years before 1582 in its calendar should only be used with agreement of the parties involved. For input, only years 0:9999 are accepted.

此外,我们还需要一个特定的day of the month。由于您的数据中不存在该数据,因此我通过01-paste0()添加到了日期向量的每个值。其他值,例如15-,也将是一个有效的选择(取决于您的数据和期望的输出类型)。这样,我们可以使函数通过format = "%d-%b-%y"识别您的日期。

查看?as.Date?strptime了解更多信息。如果您需要进一步的指导,请联系我。乐意效劳。

答案 1 :(得分:-1)

您的X轴似乎是字符而不是日期,因此该轴按字母顺序而不是按时间顺序排序。我会尝试将x值设置为日期。