我正在嘗試使用 ggplot2 創建以下 data.table obj 的餅圖;
> pietable
cluster N P p
1: 1 962 17.4 8.70
2: 3 611 11.1 22.95
3: 10 343 6.2 31.60
4: 12 306 5.5 37.45
5: 8 290 5.2 42.80
6: 5 288 5.2 48.00
7: 7 259 4.7 52.95
8: 18 210 3.8 57.20
9: 4 207 3.7 60.95
10: 9 204 3.7 64.65
11: 16 199 3.6 68.30
12: 17 201 3.6 71.90
13: 14 174 3.1 75.25
14: 22 159 2.9 78.25
15: 6 121 2.2 80.80
16: 21 106 1.9 82.85
17: 2 101 1.8 84.70
18: 26 95 1.7 86.45
19: 11 89 1.6 88.10
20: 24 84 1.5 89.65
21: 32 71 1.3 91.05
22: 13 65 1.2 92.30
23: 38 50 0.9 93.35
24: 25 41 0.7 94.15
25: 36 36 0.7 94.85
26: 20 39 0.7 95.55
27: 28 33 0.6 96.20
28: 23 30 0.5 96.75
29: 31 24 0.4 97.20
30: 15 21 0.4 97.60
31: 34 22 0.4 98.00
32: 30 14 0.3 98.35
33: 33 19 0.3 98.65
34: 40 10 0.2 98.90
35: 29 11 0.2 99.10
36: 37 9 0.2 99.30
37: 19 8 0.1 99.45
38: 27 6 0.1 99.55
39: 39 6 0.1 99.65
40: 35 3 0.1 99.75
N 是特定聚類的總數,P 是比例,p 是 P 的累積和。
創建餅圖的ggplot2線如下;
ggplot(pietable, aes("", P))
geom_bar(
stat = "identity",
aes(
fill = rev(fct_inorder(cluster))))
geom_label_repel(
data = pietable[!P<1],
aes(
label = paste0(P, "%"),
y = p1,
#col = rev(fct_inorder(cluster))
),
point.padding = NA,
max.overlaps = Inf,
nudge_x = 1,
color="red",
force = 0.5,
force_pull = 0,
segment.alpha=0.5,
arrow=arrow(length = unit(0.05, "inches"),ends = "last", type = "open"),
show.legend = F
)
geom_label_repel(
data = pietable[!P<1],
aes(label = cluster,
y = p1),
size=2,
col="black",
force = 0,
force_pull = 0,
label.size = 0.01,
show.legend = F
)
scale_fill_manual(values = P40)
coord_polar(theta = "y")
theme_void()
這會生成一個像這樣的餅圖;

由于明顯的原因,一些具有極小值的餅圖沒有標記。
我想做的是通過將切片標簽移向餅圖的圓周來重新定位切片標簽(在數量上)。
我想創建的餅圖示例如下所示;

我很感激任何建議來實作這一點。
uj5u.com熱心網友回復:
這是一個可視化的大量標簽,您可能需要考慮不同的設計。
也就是說,您可以添加nudge_x = 0.33和segment.color = 'transparent'到相關的幾何圖形以調整標簽的位置。請注意,為了使紅色箭頭與輕推的黑色標簽對齊,您必須添加aes(after_stat(1.33))到紅色幾何圖形,匹配nudge_x黑色幾何圖形的新引數 ( 1.0)。這些行在下面的代碼中標有# added注釋。
我對您的繪圖代碼做了一些輕微的修改(您的作業區中似乎有變數在您的帖子中不可用),但這是一般的想法:
ggplot(pietable, aes("", P))
geom_bar(
stat = "identity",
aes(
fill = factor(cluster)))
geom_label_repel(
data = pietable[!pietable$P<1, ],
aes(
label = paste0(P, "%"),
y = p,
x = after_stat(1.33) # added
#col = rev(fct_inorder(cluster))
),
point.padding = NA,
max.overlaps = Inf,
nudge_x = 1,
color="red",
force = 0.5,
force_pull = 0,
segment.alpha=0.5,
arrow=arrow(length = unit(0.05, "inches"),ends = "last", type = "open"),
show.legend = F
)
geom_label_repel(
data = pietable[!pietable$P<1,],
aes(label = cluster,
y = p),
size=2,
col="black",
nudge_x = 0.33, # added
force = 0,
force_pull = 0,
label.size = 0.01,
show.legend = F,
segment.color = 'transparent' # added
)
coord_polar(theta = "y")
theme_void()

And for reference, the data set I worked from:
pietable <- structure(list(cluster = c(1, 3, 10, 12, 8, 5, 7, 18, 4, 9, 16,
17, 14, 22, 6, 21, 2, 26, 11, 24, 32, 13, 38, 25, 36, 20, 28,
23, 31, 15, 34, 30, 33, 40, 29, 37, 19, 27, 39, 35), N = c(962,
611, 343, 306, 290, 288, 259, 210, 207, 204, 199, 201, 174, 159,
121, 106, 101, 95, 89, 84, 71, 65, 50, 41, 36, 39, 33, 30, 24,
21, 22, 14, 19, 10, 11, 9, 8, 6, 6, 3), P = c(17.4, 11.1, 6.2,
5.5, 5.2, 5.2, 4.7, 3.8, 3.7, 3.7, 3.6, 3.6, 3.1, 2.9, 2.2, 1.9,
1.8, 1.7, 1.6, 1.5, 1.3, 1.2, 0.9, 0.7, 0.7, 0.7, 0.6, 0.5, 0.4,
0.4, 0.4, 0.3, 0.3, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1), p = c(8.7,
22.95, 31.6, 37.45, 42.8, 48, 52.95, 57.2, 60.95, 64.65, 68.3,
71.9, 75.25, 78.25, 80.8, 82.85, 84.7, 86.45, 88.1, 89.65, 91.05,
92.3, 93.35, 94.15, 94.85, 95.55, 96.2, 96.75, 97.2, 97.6, 98,
98.35, 98.65, 98.9, 99.1, 99.3, 99.45, 99.55, 99.65, 99.75)), row.names = c(NA,
-40L), class = c("tbl_df", "tbl", "data.frame"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443274.html
