如何将标签放在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))