目前,我正在使用ggplot2的以下代码创建这样的图形
ggplot(data.df[sel,], aes(x=1, y = mean_ponderation_norm, fill = Usage)) +
geom_bar(stat="identity",color='black') +
coord_polar(theta='y')+
scale_fill_brewer(type="qual", palette = 2, direction = 1, name="")+
facet_grid(zone.x~Type_service)+
theme(#panel.grid = element_blank(), ## remove guide lines
#axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks=element_blank(), # the axis ticks
axis.title=element_blank() # the axis labels
)+
scale_y_continuous(limits = c(0, 100))
但是我希望第二列中的切片从第一列中的停止位置开始。得到这样的东西
使用极坐标绘制时,考虑在笛卡尔坐标中期望的效果看起来总是很有用的。您要寻找的东西在笛卡尔坐标中看起来像这样:
这种特殊效果几乎可以通过堆积的条形图和一些黑客手段来实现,只要您的图片具有两个方面即可。但是,您的代码建议您有4个或更多,所以这行不通。
您可以使用geom_rect
获得所需的结果,而不用使用堆积的条。您没有提供任何数据,也没有提供最少的可重复示例,这有点令人失望,因为您需要转换自己的数据才能使用geom_rect
。我必须创建自己的数据以显示如何完成此操作,这意味着您将必须弄清楚如何转换自己的数据以执行相同的操作。
无论如何,这是我要使用的数据。在您的数据中,mean_ponderation_norm
包含y值。我要称呼我为all_widths
。您需要cumsum
并将其标准化。您还需要创建一个位置为1的零的滞后副本,并将其添加到数据框中:
set.seed(69)
all_widths <- runif(10, 5, 10)
all_widths <- 60 * cumsum(all_widths)/sum(all_widths)
df <- data.frame(facet_var = rep(LETTERS[1:2], each = 5),
factor_var = rep(LETTERS[1:10]),
start_var = c(0, all_widths[-length(all_widths)]),
end_var = all_widths)
现在您的情节如下:
ggplot(df, aes(xmin = 0, xmax = 1, ymin = start_var,
ymax = end_var, fill = factor_var)) +
geom_rect(color = 'black', size = 1) +
coord_polar(theta = 'y') +
facet_grid(. ~ facet_var) +
theme(axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()) +
scale_y_continuous(limits = c(0, 100)) +
guides(fill = "none")