Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中绘制时钟?_R_Pie Chart - Fatal编程技术网

如何在R中绘制时钟?

如何在R中绘制时钟?,r,pie-chart,R,Pie Chart,我正在研究R,试图用饼图画一个时钟 代码: 但我需要所有12个标签都独立于输入中的段数 我如何实现它 保罗·穆雷尔(Paul Murrell)在他的上一本书()中有一些代码,可以使用grid和gwidget绘制交互式时钟 以下是绘制简单非交互式时钟的示例代码: require(grid) drawClock <- function(hour, minute) { t <- seq(0, 2*pi, length=13)[-13] x <- cos(t)

我正在研究R,试图用饼图画一个时钟

代码:

但我需要所有12个标签都独立于输入中的段数

我如何实现它


保罗·穆雷尔(Paul Murrell)在他的上一本书()中有一些代码,可以使用
grid
gwidget
绘制交互式时钟

以下是绘制简单非交互式时钟的示例代码:

require(grid)

drawClock <- function(hour, minute) {
    t <- seq(0, 2*pi, length=13)[-13]
    x <- cos(t)
    y <- sin(t)

    grid.newpage()
    pushViewport(dataViewport(x, y, gp=gpar(lwd=4)))
    # Circle with ticks
    grid.circle(x=0, y=0, default="native", 
                r=unit(1, "native"))
    grid.segments(x, y, x*.9, y*.9, default="native")
    # Hour hand
    hourAngle <- pi/2 - (hour + minute/60)/12*2*pi
    grid.segments(0, 0, 
                  .6*cos(hourAngle), .6*sin(hourAngle), 
                  default="native", gp=gpar(lex=4))
    # Minute hand
    minuteAngle <- pi/2 - (minute)/60*2*pi
    grid.segments(0, 0, 
                  .8*cos(minuteAngle), .8*sin(minuteAngle), 
                  default="native", gp=gpar(lex=2))    
    grid.circle(0, 0, default="native", r=unit(1, "mm"),
                gp=gpar(fill="white"))
}


完整代码

保罗·穆雷尔(Paul Murrell)在他的上一本书()中有一些代码,用于使用
网格和
gwidget
绘制交互式时钟

以下是绘制简单非交互式时钟的示例代码:

require(grid)

drawClock <- function(hour, minute) {
    t <- seq(0, 2*pi, length=13)[-13]
    x <- cos(t)
    y <- sin(t)

    grid.newpage()
    pushViewport(dataViewport(x, y, gp=gpar(lwd=4)))
    # Circle with ticks
    grid.circle(x=0, y=0, default="native", 
                r=unit(1, "native"))
    grid.segments(x, y, x*.9, y*.9, default="native")
    # Hour hand
    hourAngle <- pi/2 - (hour + minute/60)/12*2*pi
    grid.segments(0, 0, 
                  .6*cos(hourAngle), .6*sin(hourAngle), 
                  default="native", gp=gpar(lex=4))
    # Minute hand
    minuteAngle <- pi/2 - (minute)/60*2*pi
    grid.segments(0, 0, 
                  .8*cos(minuteAngle), .8*sin(minuteAngle), 
                  default="native", gp=gpar(lex=2))    
    grid.circle(0, 0, default="native", r=unit(1, "mm"),
                gp=gpar(fill="white"))
}


完整代码

出现相同问题后,此主题的更新。 如果你想把馅饼和时钟放在上面,你应该使用“GridBase”软件包

示例(使用dickoa的优秀解决方案作为代码的基础):

require('grid'))
require('gridBase')
pie(c(1,2),
顺时针=真,
半径=1.0,
初始角度=90,
col=c(‘粉色’、‘浅蓝色’),
边框=NA)

drawClock在出现相同问题后更新此主题。 如果你想把馅饼和时钟放在上面,你应该使用“GridBase”软件包

示例(使用dickoa的优秀解决方案作为代码的基础):

require('grid'))
require('gridBase')
pie(c(1,2),
顺时针=真,
半径=1.0,
初始角度=90,
col=c(‘粉色’、‘浅蓝色’),
边框=NA)

drawClock在knitr手册中有一个用于图形的时钟:(同样是动画,第4页)。knitr手册中有一个用于图形的时钟:(同样是动画,第4页)。我能把我的饼图放在时钟里面吗?饼图(c(25,20,15,10,10,30),顺时针=真,初始角度=90)和外部数字如10,20,30。。。100%而不是1-12。基本上,我想用饼图在时钟上绘制%。但网格没有饼图功能。我能把饼图放在时钟里吗?饼图(c(25,20,15,10,10,30),顺时针=真,初始角度=90)和外部数字如10,20,30。。。100%而不是1-12。基本上,我想用饼图在时钟上绘制%。但网格并没有饼图函数。
drawClock(hour = 2, minute = 30)
require('grid')
require('gridBase')    

pie(c(1,2), 
clockwise=TRUE,
radius=1.0, 
init.angle=90, 
col=c('pink', 'lightblue'),
border=NA)

drawClock <- function(hour, minute) 
    {
    t <- seq(0, 2*pi, length=13)[-13]
    x <- cos(t)
    y <- sin(t)

    vps <- baseViewports()
    pushViewport(vps$inner, vps$figure, vps$plot)
    # ticks

    grid.segments(x, y, x*.9, y*.9, default="native")
    # Hour hand
    hourAngle <- pi/2 - (hour + minute/60)/12*2*pi
    grid.segments(0, 0, 
                  .6*cos(hourAngle), .6*sin(hourAngle), 
                  default="native", gp=gpar(lex=4))
    # Minute hand
    minuteAngle <- pi/2 - (minute)/60*2*pi
    grid.segments(0, 0, 
                  .8*cos(minuteAngle), .8*sin(minuteAngle), 
                  default="native", gp=gpar(lex=2))    
    popViewport(3)
}

drawClock(hour = 2, minute = 25)