Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
如何将标签放在piechart之外?_R_Ggplot2_Pie Chart - Fatal编程技术网

如何将标签放在piechart之外?

如何将标签放在piechart之外?,r,ggplot2,pie-chart,R,Ggplot2,Pie Chart,如何将标签放在饼图外,以便标签位于正确的位置 Product <- c("Product1","Product2","Product3","Product4","Product5","Product6","Product7") Value <- c(1000000,200002,599996,1399994,2199992,2999990,3799988) df <- data.frame(Product,Value) df$Label <- paste(Product,

如何将标签放在饼图外,以便标签位于正确的位置

Product <- c("Product1","Product2","Product3","Product4","Product5","Product6","Product7")
Value <- c(1000000,200002,599996,1399994,2199992,2999990,3799988)
df <- data.frame(Product,Value)
df$Label <- paste(Product, paste(round(((df$Value/sum(df$Value))*100),2),"%"), sep="-")

library(ggplot2)

p <-  ggplot(df, aes(x = 1, y = Value, fill = Product)) + geom_bar(stat = "identity")
p <- p + coord_polar(theta = 'y') + theme_void()
p <- p + geom_text(aes(label = Label), position = position_stack(vjust = 0.5))
产品使用:

库(dplyr)
df%
突变(结束=2*pi*cumsum(值)/sum(值),
开始=滞后(结束,默认值=0),
中间=0.5*(开始+结束),
hjust=ifelse(中间>pi,1,0),
vjust=ifelse(中间3*pi/2,0,1))
库(ggforce)#用于“几何圆弧”
ggplot(df)+
几何弧条(aes(x0=0,y0=0,r0=0,r=1,
开始=开始,结束=结束,填充=产品)+
几何图形文本(aes(x=1.05*sin(中间),y=1.05*cos(中间),标签=标签,
hjust=hjust,vjust=vjust)+
固定坐标+
缩放x_连续(限制=c(-1.5,1.5),#调整以使标签不被切断
name=”“,breaks=NULL,labels=NULL)+
缩放y连续(限制=c(-1,1.1),#调整以使标签不被切断
name=”“,breaks=NULL,labels=NULL)
给出:


除了@Jaap解决方案外,还可以通过向基本绘图添加
主题
缩放连续
来实现

p <- ggplot(df,aes(x=1,y=Value,fill=Product))+geom_bar(stat="identity", color = "black")

p <- p + coord_polar(theta='y')+ theme(axis.ticks=element_blank(),
                                       axis.text.y=element_blank(),
                                       axis.text.x=element_text(colour='black'),
                                       axis.title=element_blank())
p <- p + scale_y_continuous(breaks=cumsum(df$Value) - df$Value / 2, labels= df$Label)

p我试图在@Jaap的代码中包含产品1的标签。我改变了geom_文本中的x和y值,结果成功了。代码中的所有其他内容都是相同的

geom_text(aes(x = 1 * sin(middle), y = 1 * cos(middle), label = Label,
            hjust = hjust, vjust = vjust))

非常感谢!这就是我想要的@很高兴我能帮忙。您也可以使用baseplotting来实现这一点,感谢您提供的附加信息。。。我只是花了几个小时才发现把标签放在饼图之外,但没有多少有用的链接供我浏览,也许是因为我的关键词不好,谢谢!嗯,Product1的标签在哪里?@untill Thx用于定位。我稍微调整了
scale.*\u continuous
函数中的限制;现在,所有标签都适合打印。请看更新。谢谢!我以后会试试的@让我们来看一下,刚才添加了一个备选方案,因为上一个饼图缺少标签
Product1-8.2%
geom_text(aes(x = 1 * sin(middle), y = 1 * cos(middle), label = Label,
            hjust = hjust, vjust = vjust))