嗨,我正在绘制一个饼图并将名字放在那里。并且文本在面板外部(灰色区域)被裁剪。
有没有办法改变面板的宽高比?
我尝试theme(aspect.ratio=1.5)
,但这会将饼图更改为椭圆。我希望饼图不会改变,并希望面板更宽。我尝试调整图片的大小,但这不会改变面板(灰色区域)。
任何帮助都表示赞赏。谢谢!
library(ggplot2)
source('PieChart.R')
df = data.frame('Name' = c('long long name one', 'long long name two',
'long long name three', 'long name long four'),
'Count' = c(10, 20, 30, 40))
png(width=1000, height=600, file='/Users/Yuji/OneDrive/Data/TownState/pie.png')
PieChart(df, 'Name', 'Count')
dev.off()
PieChart.R
PieChart = function (Data1, Name1, Value1){
position = cumsum(Data1[[Value1]])-0.5*Data1[[Value1]]
ggplot(data = Data1, aes_string(x=1, y=Value1, fill=Name1)) +
geom_bar(stat="identity") +
coord_polar(theta ='y') +
theme(axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text.y=element_blank(),
axis.text.x=element_text(colour='black'),
legend.position='none',
# panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank()#,
# aspect.ratio=1.5
) +
scale_y_continuous(breaks=position, labels=Data1[[Name1]])
}
答案 0 :(得分:4)
我不确定它是否可能:宽高比必须是统一的,以使馅饼为圆形。作为一种解决方法,您可以在灰色背景上关闭剪裁和绘图。
b = ggplotGrob(p + theme(plot.background=element_rect(fill=NA,colour=NA)))
b$layout$clip[b$layout$name=="panel"] = "off"
grid.draw(grobTree(rectGrob(gp=gpar(fill="grey92")), b))
或者,您可以手动编辑gtable的宽度/高度。第一步是将面板的空单位替换为" snpc",它将保持方形,然后将边距更改为" null"单位要尽可能扩大。
library(grid)
library(gtable)
p2 <- p + theme(plot.background=element_rect(fill="grey92"))
g <- ggplotGrob(p2)
g$layout$clip[g$layout$name=="panel"] <- "off"
g$respect <- FALSE
grid.newpage()
g$widths[[4]] <- unit(1,"snpc")
g$heights[[3]] <- unit(1,"snpc")
g$widths[c(1,5)] <- rep(list(unit(1,"null")), 2)
g$heights[c(1,6)] <- rep(list(unit(1,"null")), 2)
grid.draw(g)