本文介绍了ggplot饼图错误的标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我试图为百分比值创建一个饼图,当我尝试给它们贴上标签是错误的时, 我的意思是这些值指向错误的地方在图中。 $ p $ gcplot(Consumption_building_type,aes(x =,y = percentage,fill = Building_type))+ geom_bar(width = 0.5,stat =identity)+ coord_polar(theta =y,direction = -1)+ geom_text(aes(x = 1.3,y = percent / 3 + c(0,cumsum(percentage)) - )]),label = round(Consumption_building_type $ percentage,0)))+ theme_void()+ scale_fill_brewer(palette =GnBu)+ ggtitle(建筑类型细分)+ theme_minimal() 这是我使用的代码,这是我得到的结果: 当我更改 direction = 1 图表和标签转移时 我使用的数据 结构(列表( Building_type = c(商业,工业,机构,大型住宅,大型住宅,住宅,小型住宅), Total_consumption_GJ = c(99665694,5970695,10801610,63699633, 16616981,24373766,70488556), average_consumption_GJ = c(281541.508474576,72813.3536585366,109107.171717172, 677655.670212766,213038.217948718,123099.828282828,640805.054545455), total = c(354L,82L,99L,94L,78L,198L,110L),百分比= c(34.8768472906404,8.07881773399015,9.75369458128079 9.26108374384236 7.68472906403941 19.5073891625616 10.8374384236453), .Names = c(Building_type,Total_consumption_GJ,average_consumption_GJ,total ,百分比), class = c(tbl_df,tbl,data.frame),row.names = c(NA,-7L))) 真的很抱歉有关新的我们的数据呃不知道如何粘贴数据 解决方案 ggplot 2.0 +的更新 ggplot 2.0+对于 position_stack()有一些新参数,这使得解决这个问题变得简单得多。没有必要手动计算每个柱的中心点(尽管在某些情况下该解决方案仍然可能是首选,因此将保留在下面)。相反,我们可以简单地使用 position_stack()的vjust参数: g geom_bar(width = 0.5,stat =identity)+ coord_polar (theta =y,direction = 1)+ geom_text(aes(x = 1.3,y = percent,label = round(Consumption_building_type $ percentage,0)),position = position_stack(vjust = 0.5) scale_fill_brewer(palette =GnBu)+ ggtitle(建筑类型细分)+ theme_minimal()+ 实验室(x = NULL) pre> 一般的解决方案:手动计算堆积条的中点 我假设你的目标是在酒吧的中心点为每个酒吧添加一个标签。在这种情况下,首先我们可以计算中心点并将其添加到数据框中: Consumption_building_type $ zone.start< - (Consumption_building_type,c(0,cumsum(百分比)[ - length(百分比)])) Consumption_building_type $ zone.end Consumption_building_type $ label (消费建筑类型,(zone.start + zone.end)/ 2) Building_type Total_consumption_GJ average_consumption_GJ总百分比zone.start zone.end label.point 1 Commercial 99665694 281541.51 354 34.87 0.00 34.87 17.435 2工业5970695 72813.35 82 8.07 34.87 42.94 38.905 3机构10801610 109107.17 99 9.75 42.94 52.69 47.815 4大型住宅63699633 677655.67 94 9.26 52.69 61.95 57.320 5大型住宅16616981 213038.22 78 7.68 61.95 69.63 65.790 6住宅24373766 123099.83 198 19.50 69.63 89.13 79.380 7小型住宅70488556 640805.05 110 10.83 89.13 99.96 94.545 然后 geom_label中的 y 审美()就是新创建的label.point列。 我还添加了 labs(x = NULL),这样在最后一幅图的y轴上就没有空的引号。 new.plot< - ggplot(Consumption_building_type,aes(x =,y = percentage,fill = Building_type))+ geom_bar(width = 0.5,stat =identity)+ coord_polar(theta =y,direction = 1)+ geom_text(aes(x = 1.3,y = label.point,label = round(Consumption_building_type $ percentage ,0)))+ scale_fill_brewer(palette =GnBu)+ ggtitle(建筑类型细分)+ theme_minimal() I am trying to create a pie chart for percentage values, when I try to label them the labeling is wrong,I mean the values are pointing the wrong place in the graph.ggplot(Consumption_building_type, aes(x="", y=percentage, fill=Building_type))+ geom_bar(width = 0.5,stat ="identity")+coord_polar(theta = "y",direction = -1)+geom_text(aes(x=1.3,y = percentage/3 + c(0, cumsum(percentage)[- length(percentage)]),label = round(Consumption_building_type$percentage,0))) + theme_void()+ scale_fill_brewer(palette="GnBu")+ggtitle("Breakdown of building types")+theme_minimal()This is the code I used and this is the result I got:When I change the direction=1 both the graph and the labels shiftthe data I used structure(list( Building_type = c("Commercial", "Industrial", "Institutional", "Large residential", "Large Residential", "Residential", "Small residential"), Total_consumption_GJ = c(99665694, 5970695, 10801610, 63699633, 16616981, 24373766, 70488556), average_consumption_GJ = c(281541.508474576, 72813.3536585366, 109107.171717172, 677655.670212766, 213038.217948718, 123099.828282828, 640805.054545455), total = c(354L, 82L, 99L, 94L, 78L, 198L, 110L), percentage = c(34.8768472906404, 8.07881773399015, 9.75369458128079, 9.26108374384236, 7.68472906403941, 19.5073891625616, 10.8374384236453)), .Names = c("Building_type", "Total_consumption_GJ", "average_consumption_GJ", "total", "percentage"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -7L)))Really sorry about the data a new user not sure how to paste the data 解决方案 Update for ggplot 2.0+ggplot 2.0+ has some new parameters for position_stack() that make solving this problem much simpler. There's no need to calculate the center point of each bar manually (though that solution may still be preferred in some situations and is therefore preserved below). Instead, we can simply use the "vjust" parameter of position_stack():g <- ggplot(Consumption_building_type, aes(x="", y=percentage, fill=Building_type))+ geom_bar(width = 0.5,stat ="identity")+ coord_polar(theta = "y",direction = 1)+ geom_text(aes(x=1.3,y = percentage, label = round(Consumption_building_type$percentage,0)), position = position_stack(vjust = 0.5)) + scale_fill_brewer(palette="GnBu")+ggtitle("Breakdown of building types")+theme_minimal() + labs(x = NULL)General solution: calculating the midpoint of stacked bars manuallyI'm assuming that your goal is to place a label for each bar at the bar's center point. In that case, first we can calculate the center point and add it to the data frame:Consumption_building_type$zone.start <- with(Consumption_building_type, c(0, cumsum(percentage)[-length(percentage)]))Consumption_building_type$zone.end <- with(Consumption_building_type, cumsum(percentage))Consumption_building_type$label.point <- with(Consumption_building_type, (zone.start + zone.end) / 2) Building_type Total_consumption_GJ average_consumption_GJ total percentage zone.start zone.end label.point1 Commercial 99665694 281541.51 354 34.87 0.00 34.87 17.4352 Industrial 5970695 72813.35 82 8.07 34.87 42.94 38.9053 Institutional 10801610 109107.17 99 9.75 42.94 52.69 47.8154 Large residential 63699633 677655.67 94 9.26 52.69 61.95 57.3205 Large Residential 16616981 213038.22 78 7.68 61.95 69.63 65.7906 Residential 24373766 123099.83 198 19.50 69.63 89.13 79.3807 Small residential 70488556 640805.05 110 10.83 89.13 99.96 94.545And then the y aesthetic in geom_label() is simply the newly created "label.point" column.I've also added labs(x = NULL) so that there are no empty quote marks on the y-axis of the final plot.new.plot <- ggplot(Consumption_building_type, aes(x="", y=percentage, fill=Building_type))+ geom_bar(width = 0.5,stat ="identity")+ coord_polar(theta = "y",direction = 1)+ geom_text(aes(x=1.3,y = label.point, label = round(Consumption_building_type$percentage,0))) + scale_fill_brewer(palette="GnBu")+ggtitle("Breakdown of building types")+theme_minimal() 这篇关于ggplot饼图错误的标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
07-30 05:13