R-将标签放入饼图中

R-将标签放入饼图中,r,pie-chart,R,Pie Chart,使用R中的饼图函数,标签显示在饼图的外部。是否有办法将标签放置在饼图的每个部分内 f=table(LETTERS[c(rep(1,7),rep(2,10),rep(3,5))]) pie(f) 这里展示了如何使用ggplot执行此操作。使用pie函数是否无法执行此操作 编辑:为了回应一些关于饼图使用的评论,我想用它们来阐述我的意图。实际上,我只是使用饼图作为散点图矩阵的一部分来可视化整个回归数据框架。矩阵设置如下: 下部面板 背景颜色较深的样本相关数表示更高的绝对相关性 上面板 逐数值的散

使用R中的
饼图
函数,标签显示在饼图的外部。是否有办法将标签放置在饼图的每个部分内

f=table(LETTERS[c(rep(1,7),rep(2,10),rep(3,5))])
pie(f)
这里展示了如何使用
ggplot
执行此操作。使用
pie
函数是否无法执行此操作

编辑:为了回应一些关于饼图使用的评论,我想用它们来阐述我的意图。实际上,我只是使用饼图作为散点图矩阵的一部分来可视化整个回归数据框架。矩阵设置如下:

  • 下部面板
    背景颜色较深的样本相关数表示更高的绝对相关性
  • 上面板
    • 逐数值的散点图
    • 按系数计算的数值箱线图
  • 斜板
    • 数字图像的正态密度直方图
    • 因子饼图
看,我需要一些对角线上的因子,然后决定做一个饼图。我决定不管怎样都不贴标签,同时也去掉了所有的轴标签。我宁愿用较深的颜色做较大的派片。。。因此,也许这是一种显示信息的糟糕方式,但我认为它对因子变量很有效,它比条形图更好地显示了观测值在因子水平上的比例。下图描述了
lars
包中的糖尿病数据集


我认为没有一种简单的方法可以做到这一点,因为标签位置是硬编码的-请看本章末尾

body(pie)

        if (!is.na(lab) && nzchar(lab)) {
            lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y)
            text(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, 
                adj = ifelse(P$x < 0, 1, 0), ...)
        }
    }
    title(main = main, ...)
    invisible(NULL)
}
主体(饼图)
如果(!is.na(实验室)和&nzhar(实验室)){
行(c(1,1.05)*P$x,c(1,1.05)*P$y)
text(1.1*P$x,1.1*P$y,标签[i],xpd=TRUE,
adj=ifelse(P$x<0,1,0),…)
}
}
标题(main=main,…)
不可见(空)
}
但是你可以覆盖程序的这个部分

# create a new pie function to save overwriting original
newpie <- pie

# Tweak the label positions - changed 1.1 to 0.7
# also commented out the lines function - so that the  
# small lines next to the labels are not plot
newlbs <- quote(if (!is.na(lab) && nzchar(lab)) {
                   #lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y)
                    text(0.7 * P$x, 0.7 * P$y, labels[i], xpd = TRUE, 
                                     adj = ifelse(P$x < 0, 1, 0), ...)
})

# add in the new lines of code - trial and error found the right position
body(newpie)[[22]][[4]][[7]] <- newlbs

newpie(f)
#创建一个新的饼图函数以保存覆盖的原始文件

纽皮:很好的解决办法。我打赌改变饼图是很难的,因为统计学中没有人应该使用饼图干杯,Richard,是的,我要引用
?饼图
帮助-
饼图是显示信息的一种非常糟糕的方式
Pro提示:您可以在函数上使用
tail
,即
tail(饼图,9)
相当于您可能必须滚动的
body
调用。当然,您仍然需要
body@RichardScriven; 谢谢你的指点——那当然更整洁了。对于重写代码,不幸的是,
body
中的行并不是单行(
body(pie)[22]
)-有没有更好的方法来实现这一点,因为上面的方法看起来非常笨拙?我从来没有见过
body(FUN)[[x][[y][[z]]