ggplot2中讓圖形秒變「手繪風」
前景提要:
一行Python代碼讓圖形秒變「手繪風」
一款蠢萌蠢萌的可視化工具
xkcd主要有以下6個屬性
theme_xkcd Creates an XKCD theme theme_xkcd Creates an XKCD theme xkcd-package Plotting ggplot2 Graphics in an XKCD Style xkcdaxis Plot the axis xkcdline Draw lines or circunferences xkcdman Draw a stick figure xkcdrect Draw fuzzy rectangles
xkcd-package Plotting ggplot2 Graphics in an XKCD Style theme_xkcd Creates an XKCD theme xkcd-package Plotting ggplot2 Graphics in an XKCD Style xkcdaxis Plot the axis xkcdline Draw lines or circunferences xkcdman Draw a stick figure xkcdrect Draw fuzzy rectangles
xkcdaxis Plot the axis theme_xkcd Creates an XKCD theme xkcd-package Plotting ggplot2 Graphics in an XKCD Style xkcdaxis Plot the axis xkcdline Draw lines or circunferences xkcdman Draw a stick figure xkcdrect Draw fuzzy rectangles
xkcdline Draw lines or circunferences theme_xkcd Creates an XKCD theme xkcd-package Plotting ggplot2 Graphics in an XKCD Style xkcdaxis Plot the axis xkcdline Draw lines or circunferences xkcdman Draw a stick figure xkcdrect Draw fuzzy rectangles
xkcdman Draw a stick figure theme_xkcd Creates an XKCD theme xkcd-package Plotting ggplot2 Graphics in an XKCD Style xkcdaxis Plot the axis xkcdline Draw lines or circunferences xkcdman Draw a stick figure xkcdrect Draw fuzzy rectangles
xkcd使用前準備
#安裝xkcd #安装xkcd options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) install.packages("xkcd",dependencies = TRUE) # 准备xkcd字体--本文在mac下,其他系统会有所差异library(extrafont) download.file("http://simonsoftware.se/other/xkcd.ttf", dest = "xkcd.ttf", mode = "wb") system("cp xkcd.ttf ~/Library/Fonts/") font_import(pattern = "[X/x]kcd", prompt = FALSE)
options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) #安装xkcd options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) install.packages("xkcd",dependencies = TRUE) # 准备xkcd字体--本文在mac下,其他系统会有所差异library(extrafont) download.file("http://simonsoftware.se/other/xkcd.ttf", dest = "xkcd.ttf", mode = "wb") system("cp xkcd.ttf ~/Library/Fonts/") font_import(pattern = "[X/x]kcd", prompt = FALSE)
install.packages("xkcd",dependencies = TRUE) #安装xkcd options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) install.packages("xkcd",dependencies = TRUE) # 准备xkcd字体--本文在mac下,其他系统会有所差异library(extrafont) download.file("http://simonsoftware.se/other/xkcd.ttf", dest = "xkcd.ttf", mode = "wb") system("cp xkcd.ttf ~/Library/Fonts/") font_import(pattern = "[X/x]kcd", prompt = FALSE)
# 準備xkcd字體--本文在mac下,其他系統會有所差異library(extrafont) #安装xkcd options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) install.packages("xkcd",dependencies = TRUE) # 准备xkcd字体--本文在mac下,其他系统会有所差异library(extrafont) download.file("http://simonsoftware.se/other/xkcd.ttf", dest = "xkcd.ttf", mode = "wb") system("cp xkcd.ttf ~/Library/Fonts/") font_import(pattern = "[X/x]kcd", prompt = FALSE)
download.file("http://simonsoftware.se/other/xkcd.ttf", dest = "xkcd.ttf", mode = "wb") #安装xkcd options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) install.packages("xkcd",dependencies = TRUE) # 准备xkcd字体--本文在mac下,其他系统会有所差异library(extrafont) download.file("http://simonsoftware.se/other/xkcd.ttf", dest = "xkcd.ttf", mode = "wb") system("cp xkcd.ttf ~/Library/Fonts/") font_import(pattern = "[X/x]kcd", prompt = FALSE)
system("cp xkcd.ttf ~/Library/Fonts/") #安装xkcd options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) install.packages("xkcd",dependencies = TRUE) # 准备xkcd字体--本文在mac下,其他系统会有所差异library(extrafont) download.file("http://simonsoftware.se/other/xkcd.ttf", dest = "xkcd.ttf", mode = "wb") system("cp xkcd.ttf ~/Library/Fonts/") font_import(pattern = "[X/x]kcd", prompt = FALSE)
xkcd使用小例子
全面介紹了xkcd 6個屬性的使用
volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
64251)) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
p <- ggplot() + labs(title="Lovely XKCD IN R") + volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
#xkcdrect繪製漫畫風格柱子邊界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
3600), volunteers, fill = "#dc2624", colour = "#2b4750") + volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
#theme_xkcd添加漫畫風格主題theme_xkcd() + volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
#xkcdaxis添加漫畫風格軸xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
xrange <- range(volunteers$year) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
yrange <- range(volunteers$number) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
ratioxy <- diff(xrange)/diff(yrange) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
mapping <- aes(x = x, y = y, scale = scale, ratioxy = ratioxy, angleofspine = angleofspine, volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
anglerighthumerus = anglerighthumerus, anglelefthumerus = anglelefthumerus, anglerightradius = anglerightradius, volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
angleleftradius = angleleftradius, anglerightleg = anglerightleg, angleleftleg = angleleftleg, volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
angleofneck = angleofneck, color = color) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)
#xkcdman添加漫畫風格小人p + xkcdman(mapping, dataman) + volunteers <- data.frame(year = c(2007:2011), number = c(56470, 56998, 59686, 61783, 64251)) datalines <- data.frame(xbegin=c(2007.3,2008.5),ybegin=c(63000,59600), xend=c(2012.5,2011.3), yend=c(68400,70000)) p <- ggplot() + labs(title="Lovely XKCD IN R") + #xkcdrect绘制漫画风格柱子边界xkcdrect(aes(xmin = year, xmax = year + 0.3, ymin = number, ymax = number + 3600), volunteers, fill = "#dc2624", colour = "#2b4750") + #theme_xkcd添加漫画风格主题theme_xkcd() + #xkcdaxis添加漫画风格轴xkcdaxis(range(c(2007, 2012)), range(c(56000, 70000))) xrange <- range(volunteers$year) yrange <- range(volunteers$number) ratioxy <- diff(xrange)/diff(yrange) 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, color = color) dataman <- data.frame(x = c(2009.5), y = c(70000), scale = c(2000), ratioxy = ratioxy, angleofspine = -pi/2, anglerighthumerus = -pi/6, anglelefthumerus = pi + pi/6, anglerightradius = -pi/12, angleleftradius = -pi/8, angleleftleg = 3 * pi/2 + pi/12, anglerightleg = 3 * pi/2 - pi/12, angleofneck = runif(1, min = 3 * pi/2 - pi/10, max = 3 * pi/2 + pi/10), color = c("MAX")) #xkcdman添加漫画风格小人p + xkcdman(mapping, dataman) + #xkcdline添加漫画曲线xkcdline(aes(x=xbegin,y=ybegin,xend=xend,yend=yend),datalines, xjitteramount = 0.7)

更多demo



。 。 。 。 。 。 。 。 。 。 。
Ref:

「歡迎關注公眾號」