在一个图中绘制带有标签的多个饼图
Plotting multiple Pie Charts with label in one plot
前几天我遇到了这个问题,并试图为自己重新创建它。 ggplot、facet、饼图:将文本放在饼图切片的中间
。我的数据格式非常相似,但遗憾的是接受的答案没有帮助,因此我重新发布。
我基本上想创建已接受的答案,但使用我自己的数据,但我 运行 遇到的问题是 coord_polar does not support free scale
。使用第一个答案:
我尝试使用答案的第二个版本,使用 ddplyr 版本,但我也没有得到我想要的输出。使用第二个答案:
显然 none 这些具有预期的效果。我更喜欢创建一个大小饼图,但只显示了四个作为示例,如下:。
这是我在 excel 中完成的,但只有一个图例,没有背景网格。
代码
title<-c(1,1,2,2,3,3,4,4,5,5,6,6)
type<-c('A','B','A','B','A','B','A','B','A','B','A','B')
value<-c(0.25,0.75,0.3,0.7,0.4,0.6,0.5,0.5,0.1,0.9,0.15,0.85)
piec<-data.frame(title,type,value)
library(tidyverse)
p1<-ggplot(data = piec, aes(x = "", y = value, fill = type)) +
geom_bar(stat = "identity") +
geom_text(aes(label = value), position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y")
#facet_grid(title ~ ., scales = "free")
p1
piec <- piec %>% group_by(title) %>% mutate(pos=cumsum(value)-0.5*value)
p2<-ggplot(data = piec) +
geom_bar(aes(x = "", y = value, fill = type), stat = "identity") +
geom_text(aes(x = "", y = pos, label = value)) +
coord_polar(theta = "y")
#facet_grid(Channel ~ ., scales = "free")
p2
您不必为 geom_text
和 geom_bar
提供不同的 y 值(对它们都使用 y = value
)。接下来您必须在 geom_text
中指定位置。最后,从构面中删除 scales
。
library(ggplot2)
title<-c(1,1,2,2,3,3,4,4,5,5,6,6)
type<-c('A','B','A','B','A','B','A','B','A','B','A','B')
value<-c(0.25,0.75,0.3,0.7,0.4,0.6,0.5,0.5,0.1,0.9,0.15,0.85)
piec<-data.frame(title,type,value)
ggplot(piec, aes("", value, fill = type)) +
geom_bar(stat = "identity", color = "white", size = 1) +
geom_text(aes(label = paste0(value * 100, "%")),
position = position_stack(vjust = 0.5),
color = "white", size = 3) +
coord_polar(theta = "y") +
facet_wrap(~ title, ncol = 3) +
scale_fill_manual(values = c("#0048cc", "#cc8400")) +
theme_void()
前几天我遇到了这个问题,并试图为自己重新创建它。 ggplot、facet、饼图:将文本放在饼图切片的中间 。我的数据格式非常相似,但遗憾的是接受的答案没有帮助,因此我重新发布。
我基本上想创建已接受的答案,但使用我自己的数据,但我 运行 遇到的问题是 coord_polar does not support free scale
。使用第一个答案:
我尝试使用答案的第二个版本,使用 ddplyr 版本,但我也没有得到我想要的输出。使用第二个答案:
显然 none 这些具有预期的效果。我更喜欢创建一个大小饼图,但只显示了四个作为示例,如下:
代码
title<-c(1,1,2,2,3,3,4,4,5,5,6,6)
type<-c('A','B','A','B','A','B','A','B','A','B','A','B')
value<-c(0.25,0.75,0.3,0.7,0.4,0.6,0.5,0.5,0.1,0.9,0.15,0.85)
piec<-data.frame(title,type,value)
library(tidyverse)
p1<-ggplot(data = piec, aes(x = "", y = value, fill = type)) +
geom_bar(stat = "identity") +
geom_text(aes(label = value), position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y")
#facet_grid(title ~ ., scales = "free")
p1
piec <- piec %>% group_by(title) %>% mutate(pos=cumsum(value)-0.5*value)
p2<-ggplot(data = piec) +
geom_bar(aes(x = "", y = value, fill = type), stat = "identity") +
geom_text(aes(x = "", y = pos, label = value)) +
coord_polar(theta = "y")
#facet_grid(Channel ~ ., scales = "free")
p2
您不必为 geom_text
和 geom_bar
提供不同的 y 值(对它们都使用 y = value
)。接下来您必须在 geom_text
中指定位置。最后,从构面中删除 scales
。
library(ggplot2)
title<-c(1,1,2,2,3,3,4,4,5,5,6,6)
type<-c('A','B','A','B','A','B','A','B','A','B','A','B')
value<-c(0.25,0.75,0.3,0.7,0.4,0.6,0.5,0.5,0.1,0.9,0.15,0.85)
piec<-data.frame(title,type,value)
ggplot(piec, aes("", value, fill = type)) +
geom_bar(stat = "identity", color = "white", size = 1) +
geom_text(aes(label = paste0(value * 100, "%")),
position = position_stack(vjust = 0.5),
color = "white", size = 3) +
coord_polar(theta = "y") +
facet_wrap(~ title, ncol = 3) +
scale_fill_manual(values = c("#0048cc", "#cc8400")) +
theme_void()