首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xkcd软件包:“忽略未知美学”

xkcd软件包:“忽略未知美学”
EN

Stack Overflow用户
提问于 2017-03-18 15:52:48
回答 2查看 708关注 0票数 2

我正在学习格列奈特中关于第7-8页的例子(在“一些基本示例”下)。

以下是代码:

代码语言:javascript
复制
library(xkcd)
volunteers <- data.frame(year=c(2007:2011),
                           number=c(56470, 56998, 59686, 61783, 64251))
 xrange <- range(volunteers$year)
 yrange <- range(volunteers$number)
 ratioxy <- diff(xrange) / diff(yrange)
datalines <- data.frame(xbegin=c(2008.3,2010.5),ybegin=c(63000,59600),
                           xend=c(2008.5,2010.3), yend=c(63400,59000))
mapping <- aes(
  x = x, y = y, scale = scale, ratioxy = ratioxy, angleofspine = angleofspine, 
  anglerighthumerus = anglerighthumerus, anglelefthumerus = anglelefthumerus,
  anglerightradius = anglerightradius, angleleftradius = angleleftradius,
  anglerightleg =  anglerightleg, angleleftleg = angleleftleg, 
  angleofneck = angleofneck)
dataman <- data.frame( x= c(2008,2010), y=c(63000, 58850),
                          scale = 1000 ,
                          ratioxy = ratioxy,
                          angleofspine = -pi/2 ,
                          anglerighthumerus = c(-pi/6, -pi/6),
                          anglelefthumerus = c(-pi/2 - pi/6, -pi/2 - pi/6),
                          anglerightradius = c(pi/5, -pi/5),
                          angleleftradius = c(pi/5, -pi/5),
                          angleleftleg = 3*pi/2 + pi / 12 ,
                          anglerightleg = 3*pi/2 - pi / 12,
                          angleofneck = runif(1, 3*pi/2-pi/10, 3*pi/2+pi/10))
p <- ggplot() + geom_smooth(mapping=aes(x=year, y =number),
                               data =volunteers, method="loess") +
   xkcdaxis(xrange,yrange) +
  ylab("Volunteers at Caritas Spain") +
   xkcdman(mapping, dataman) +
 annotate("text", x=2008.7, y = 63700,
             label = "We Need\nVolunteers!", family="xkcd" ) +
  annotate("text", x=2010.5, y = 60000,
             label = "Sure\nI can!", family="xkcd" ) +
   xkcdline(aes(xbegin=xbegin,ybegin=ybegin,xend=xend,yend=yend),
             datalines, xjitteramount = 0.12)

Warning: Ignoring unknown aesthetics: xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, diameter
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, diameter
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, diameter
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, diameter
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: scale, ratioxy, angleofspine, anglerighthumerus, anglelefthumerus, anglerightradius, angleleftradius, anglerightleg, angleleftleg, angleofneck, xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: xbegin, ybegin, xend, yend
Warning: Ignoring unknown aesthetics: xbegin, ybegin, xend, yend

正如我们所看到的,大量的警告出现了。深入研究各种功能并没有提供太多的洞察力;我唯一的猜测是,ggplot2不知道如何处理这些不同的美学。为什么会出现这些警告,这是否一个问题?

会话信息:

代码语言:javascript
复制
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] xkcd_0.0.5     extrafont_0.17 ggplot2_2.2.1 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.9         RColorBrewer_1.1-2  plyr_1.8.4         
 [4] base64enc_0.1-3     tools_3.3.1         rpart_4.1-10       
 [7] digest_0.6.12       tibble_1.2          gtable_0.2.0       
[10] htmlTable_1.9       checkmate_1.8.2     lattice_0.20-33    
[13] Matrix_1.2-6        gridExtra_2.2.1     Rttf2pt1_1.3.4     
[16] stringr_1.2.0       cluster_2.0.4       knitr_1.15.1       
[19] htmlwidgets_0.8     grid_3.3.1          nnet_7.3-12        
[22] data.table_1.10.4   survival_2.41-2     foreign_0.8-66     
[25] latticeExtra_0.6-28 Formula_1.2-1       extrafontdb_1.0    
[28] magrittr_1.5        Hmisc_4.0-2         scales_0.4.1       
[31] backports_1.0.5     htmltools_0.3.5     splines_3.3.1      
[34] assertthat_0.1      colorspace_1.3-2    labeling_0.3       
[37] stringi_1.1.2       acepack_1.4.1       lazyeval_0.2.0     
[40] munsell_0.4.3    
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-18 21:02:18

警告是无害的,如果有点烦人的话。要删除它们,需要对xkcdline.R源进行编辑,以便在传递给geom_path()之前从映射中删除额外的美学。从0.05版本开始,需要对xkcdline.R进行以下更改

新的内部职能:

代码语言:javascript
复制
remove_xkcd_mappings <- function(mapping) {
  mapping <- mapping[!(names(mapping) %in% c("xbegin",
                                             "xend",
                                             "ybegin",
                                             "yend",
                                             "diameter",
                                             "scale",
                                             "ratioxy",
                                             "angleofspine",
                                             "anglerighthumerus",
                                             "anglelefthumerus",
                                             "anglerightradius",
                                             "angleleftradius",
                                             "anglerightleg",
                                             "angleleftleg",                            
                                             "angleofneck"))]
}

更改为xkcdline函数的末尾:

代码语言:javascript
复制
  listofpaths <- lapply(listofinterpolateswithillustrativedata,
                        function(x, mapping, mask, ...) {
                          pathmask <- NULL
                          ##print(mapping)
                          if(mask) {
                            ## Plot a white line widther that the original line
                            ## We must check the color, colour or size
                            ## and change them to white and a greater width
                            argList<-list(...)

                            for(i in intersect(c("color","colour"), names(argList)))
                              argList[i] <- NULL
                            argList$mapping <- remove_xkcd_mappings(mapping)
                            argList$data <- x
                            argList$colour <- "white"
                            if(is.null(argList$size)==TRUE) argList$size <- 3
                            if(argList$size <= 3 ) argList$size <- 3
                            else  argList$size <- argList$size *2
                            ##print(argList)
                            pathmask <- do.call("geom_path",argList)
                            ##pathmask <- geom_path(mapping = mapping, data = x, colour="white",size=8)
                            }
                          c(pathmask,
                            geom_path(mapping = remove_xkcd_mappings(mapping), data = x, ...))
                       },
                       mapping = mapping,
                       mask= mask 
                        ## mask = mask,
                        ## ... = ... ggplot2.0 does not like dots
                       )
  listofpaths  

我在github上放了一个版本的github。这可以通过使用devtools::install_github("NikNakk/xkcd")来安装。

仍然存在与在此数据集中使用loess有关的警告,但这些警告与xkcd无关。这可以通过绘制以下图来看出:

代码语言:javascript
复制
ggplot() + geom_smooth(mapping = aes(x = year, y = number),
                            data = volunteers, method = "loess")
票数 1
EN

Stack Overflow用户

发布于 2017-03-18 20:51:07

我重新运行了您的代码,它提供了一个相当好的结果(我希望这正是您所期望的)。

首先,更新所有相关的包,ggplot2,外型,xkcdcolors,xkcd,等等

我只是在您提供的代码中添加了一些额外的库和最后一行代码,它运行起来很有魅力,

守则如下:

代码语言:javascript
复制
library(xkcd)
library(xkcdcolors)
library(extrafont)
volunteers <- data.frame(year=c(2007:2011),
                         number=c(56470, 56998, 59686, 61783, 64251))
xrange <- range(volunteers$year)
yrange <- range(volunteers$number)
ratioxy <- diff(xrange) / diff(yrange)
datalines <- data.frame(xbegin=c(2008.3,2010.5),ybegin=c(63000,59600),
                        xend=c(2008.5,2010.3), yend=c(63400,59000))
mapping <- aes(
  x = x, y = y, scale = scale, ratioxy = ratioxy, angleofspine = angleofspine, 
  anglerighthumerus = anglerighthumerus, anglelefthumerus = anglelefthumerus,
  anglerightradius = anglerightradius, angleleftradius = angleleftradius,
  anglerightleg =  anglerightleg, angleleftleg = angleleftleg, 
  angleofneck = angleofneck)
dataman <- data.frame( x= c(2008,2010), y=c(63000, 58850),
                       scale = 1000 ,
                       ratioxy = ratioxy,
                       angleofspine = -pi/2 ,
                       anglerighthumerus = c(-pi/6, -pi/6),
                       anglelefthumerus = c(-pi/2 - pi/6, -pi/2 - pi/6),
                       anglerightradius = c(pi/5, -pi/5),
                       angleleftradius = c(pi/5, -pi/5),
                       angleleftleg = 3*pi/2 + pi / 12 ,
                       anglerightleg = 3*pi/2 - pi / 12,
                       angleofneck = runif(1, 3*pi/2-pi/10, 3*pi/2+pi/10))
p <- ggplot() + geom_smooth(mapping=aes(x=year, y =number),
                            data =volunteers, method="loess") +
  xkcdaxis(xrange,yrange) +
  ylab("Volunteers at Caritas Spain") +
  xkcdman(mapping, dataman) +
  annotate("text", x=2008.7, y = 63700,
           label = "We Need\nVolunteers!", family="xkcd" ) +
  annotate("text", x=2010.5, y = 60000,
           label = "Sure\nI can!", family="xkcd" ) +
  xkcdline(aes(xbegin=xbegin,ybegin=ybegin,xend=xend,yend=yend),
           datalines, xjitteramount = 0.12)
p

然而,有一个关于xkcd字体丢失的警告,这个警告看起来是:Warning message:In theme_xkcd() : Not xkcd fonts installed! See vignette("xkcd-intro")。我忽略了它,在最后一行p之后,我得到了以下输出:

我猜这是你想要的。

若要处理警告,请参考第2节:xkcd-小插曲

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42876478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档