[英]Change legend and shape in ggbiplot pca
你能幫我處理我的 pca 嗎? 我想改變形狀,使每個物種都有不同的顏色,每個物種的所有 2-3 個生物都有 2-3 個不同的符號。 它應該是這樣的:在此處輸入圖像描述
到目前為止,我嘗試了以下代碼:
setwd("~/Schwarze Johannisbeeren/SJ Wein mit nicht Sc/PCA/stackoverflow frage")
results = read.csv("results.csv", sep = ";", encoding = "UTF-8", header=TRUE, check.names=FALSE)
results.pca <- prcomp(results[,c(3:7)],
center = TRUE,
scale. = TRUE)
#grouping by organism
results.organism <- results[, 1]
#by species
results.species <- results[, 2]
summary(results.pca)
library(ggplot2)
library(ggbiplot)
ggbiplot(results.pca, alpha=0, obs.scale = 1, var.scale = 1 ,ellipse = TRUE,ellipse.prob=0.68, circle = F, varname.size=0,
var.axes = F, groups=results$species) +
theme_bw()+
geom_point(aes( colour=factor(results.species)), size=2)+
scale_shape_manual(values= c("Mt1"= 1, "Mt2" =2, "Al1"= 1, "Al2" =2, "Bg1" =1, "Bg2"=2, "Bg3" =3, "Cs1"= 1, "Cs2" =2, "Cs3" =3, "Df1"= 1, "Df2" =2, "Df3" =3))+
#scale_color_brewer(name= "organism", type = "qual", palette = 2)+
#scale_x_continuous (limits = c (-1, 9))+
theme(axis.text.x = element_text(size = 12, colour = "black", vjust = 0.5, hjust = 1, face= "bold"),
axis.title.y = element_text(size = 12, face = "bold"),
axis.title.x = element_text(size = 12, face = "bold"),
axis.text.y = element_text(colour = "black", size = 12, face = "bold"))
那是我的數據
> results
organism species lactones cyanides alcohols ethers acids
1 Mt1 Mt 23435.167 166.4 137653.9 4040.1 1131.52
2 Mt1 Mt 23303.111 168.9 153511.0 4529.1 1148.52
3 Mt1 Mt 22340.556 176.6 150719.9 3255.8 1200.88
4 Mt2 Mt 51519.222 175.9 173401.1 3890.1 1196.12
5 Mt2 Mt 48824.500 166.5 171614.4 3694.1 1132.20
6 Mt2 Mt 50427.278 165.4 168865.1 3693.2 1124.72
7 Al1 Al 25260.222 162.0 211737.4 9563.9 1101.60
8 Al1 Al 23177.556 161.5 199886.7 10403.3 1098.20
9 Al1 Al 27903.000 156.2 240088.4 11897.1 1062.16
10 Al2 Al 5993.722 180.4 289334.9 6673.3 1226.72
11 Al2 Al 7307.389 169.7 275631.1 8333.4 1153.96
12 Al2 Al 9419.167 147.5 277924.5 9622.2 1003.00
13 Bg1 Bg 58216.944 132.4 92275.3 4099.5 900.32
14 Bg1 Bg 69860.222 147.4 105654.9 4080.6 1002.32
15 Bg1 Bg 72809.333 145.8 111731.3 4014.6 991.44
16 Bg2 Bg 51584.611 142.9 105548.2 6450.1 971.72
17 Bg2 Bg 57738.056 141.2 117728.9 6332.4 960.16
18 Bg2 Bg 53356.056 142.7 110260.2 6506.2 970.36
19 Bg3 Bg 41983.389 130.8 103799.4 4781.8 889.44
20 Bg3 Bg 46930.722 148.3 113944.6 5151.6 1008.44
21 Bg3 Bg 49487.611 139.4 121976.5 5318.3 947.92
22 Cs1 Cs 7155.056 161.6 221538.8 8356.0 1098.88
23 Cs1 Cs 8153.611 151.0 179823.0 7961.2 1026.80
24 Cs1 Cs 7445.722 168.6 176978.0 8196.5 1146.48
25 Cs2 Cs 10771.556 126.4 144314.1 8634.6 859.52
26 Cs2 Cs 12239.556 142.6 142913.7 9471.9 969.68
27 Cs2 Cs 13788.611 136.1 131506.7 9390.4 925.48
28 Cs3 Cs 12082.111 152.0 171730.0 6259.6 1033.60
29 Cs3 Cs 14331.556 143.3 141748.7 7532.8 974.44
30 Cs3 Cs 14123.056 158.2 150303.0 7755.8 1075.76
31 Df1 Df 26906.778 156.2 310203.9 5505.5 1062.16
32 Df1 Df 20689.111 163.5 214322.9 5315.6 1111.80
33 Df1 Df 22872.722 154.1 197572.9 4627.7 1047.88
34 Df2 Df 18838.222 159.2 125167.6 12372.9 1082.56
35 Df2 Df 18218.667 155.8 127077.2 11182.0 1059.44
36 Df2 Df 18545.389 156.2 154400.4 10543.6 1062.16
37 Df3 Df 19924.111 156.4 199472.6 4452.3 1063.52
38 Df3 Df 22504.056 158.0 196343.0 3994.1 1074.40
39 Df3 Df 16907.278 151.5 185052.9 4084.6 1030.20
>
順便說一下,軸標簽是否可以只使用 PC1( x %) 而不是 PC1(x % explained var.)?
實現您想要的結果的一種方法是首先創建形狀和調色板,其中 map 有機體名稱為形狀和 colors。其次,在您的geom_point
內通過添加一個包含我使用dplyr::bind_cols
的organism
的列來擴展數據。 這樣做允許 map organism
的shape
和color
aes。 最后,使用scale_color_discrete(guide = "none")
去除組的顏色圖例,並通過ggnewscale::new_scale_color
和scale_color_manual
添加第二個色標:
注意:軸標題的簡單修復是使用+labs(x =..., y =...)
手動設置它們。
library(ggplot2)
library(ggbiplot)
pal_shape <- gsub("^.*?(.)$", "\\1", results$organism)
pal_shape <- scales::shape_pal()(3)[as.integer(pal_shape)]
names(pal_shape) <- results$organism
pal_color <- gsub("^(.*?).$", "\\1", results$organism)
pal_color <- setNames(scales::hue_pal()(5), sort(unique(results$species)))[pal_color]
names(pal_color) <- results$organism
ggbiplot(results.pca,
alpha = 0, obs.scale = 1, var.scale = 1, ellipse = TRUE, ellipse.prob = 0.68, circle = F, varname.size = 0,
var.axes = F, groups = results$species
) +
scale_color_discrete(guide = "none") +
ggnewscale::new_scale_color() +
geom_point(data = ~ dplyr::bind_cols(.x, organism = results$organism),
aes(shape = organism, colour = organism),
size = 2) +
scale_shape_manual(values = pal_shape) +
scale_color_manual(values = pal_color) +
theme_bw() +
theme(
axis.text.x = element_text(size = 12, colour = "black", vjust = 0.5, hjust = 1, face = "bold"),
axis.title.y = element_text(size = 12, face = "bold"),
axis.title.x = element_text(size = 12, face = "bold"),
axis.text.y = element_text(colour = "black", size = 12, face = "bold")
)
數據
results <- structure(list(organism = c(
"Mt1", "Mt1", "Mt1", "Mt2", "Mt2",
"Mt2", "Al1", "Al1", "Al1", "Al2", "Al2", "Al2", "Bg1", "Bg1",
"Bg1", "Bg2", "Bg2", "Bg2", "Bg3", "Bg3", "Bg3", "Cs1", "Cs1",
"Cs1", "Cs2", "Cs2", "Cs2", "Cs3", "Cs3", "Cs3", "Df1", "Df1",
"Df1", "Df2", "Df2", "Df2", "Df3", "Df3", "Df3"
), species = c(
"Mt",
"Mt", "Mt", "Mt", "Mt", "Mt", "Al", "Al", "Al", "Al", "Al", "Al",
"Bg", "Bg", "Bg", "Bg", "Bg", "Bg", "Bg", "Bg", "Bg", "Cs", "Cs",
"Cs", "Cs", "Cs", "Cs", "Cs", "Cs", "Cs", "Df", "Df", "Df", "Df",
"Df", "Df", "Df", "Df", "Df"
), lactones = c(
23435.167, 23303.111,
22340.556, 51519.222, 48824.5, 50427.278, 25260.222, 23177.556,
27903, 5993.722, 7307.389, 9419.167, 58216.944, 69860.222, 72809.333,
51584.611, 57738.056, 53356.056, 41983.389, 46930.722, 49487.611,
7155.056, 8153.611, 7445.722, 10771.556, 12239.556, 13788.611,
12082.111, 14331.556, 14123.056, 26906.778, 20689.111, 22872.722,
18838.222, 18218.667, 18545.389, 19924.111, 22504.056, 16907.278
), cyanides = c(
166.4, 168.9, 176.6, 175.9, 166.5, 165.4, 162,
161.5, 156.2, 180.4, 169.7, 147.5, 132.4, 147.4, 145.8, 142.9,
141.2, 142.7, 130.8, 148.3, 139.4, 161.6, 151, 168.6, 126.4,
142.6, 136.1, 152, 143.3, 158.2, 156.2, 163.5, 154.1, 159.2,
155.8, 156.2, 156.4, 158, 151.5
), alcohols = c(
137653.9, 153511,
150719.9, 173401.1, 171614.4, 168865.1, 211737.4, 199886.7, 240088.4,
289334.9, 275631.1, 277924.5, 92275.3, 105654.9, 111731.3, 105548.2,
117728.9, 110260.2, 103799.4, 113944.6, 121976.5, 221538.8, 179823,
176978, 144314.1, 142913.7, 131506.7, 171730, 141748.7, 150303,
310203.9, 214322.9, 197572.9, 125167.6, 127077.2, 154400.4, 199472.6,
196343, 185052.9
), ethers = c(
4040.1, 4529.1, 3255.8, 3890.1,
3694.1, 3693.2, 9563.9, 10403.3, 11897.1, 6673.3, 8333.4, 9622.2,
4099.5, 4080.6, 4014.6, 6450.1, 6332.4, 6506.2, 4781.8, 5151.6,
5318.3, 8356, 7961.2, 8196.5, 8634.6, 9471.9, 9390.4, 6259.6,
7532.8, 7755.8, 5505.5, 5315.6, 4627.7, 12372.9, 11182, 10543.6,
4452.3, 3994.1, 4084.6
), acids = c(
1131.52, 1148.52, 1200.88,
1196.12, 1132.2, 1124.72, 1101.6, 1098.2, 1062.16, 1226.72, 1153.96,
1003, 900.32, 1002.32, 991.44, 971.72, 960.16, 970.36, 889.44,
1008.44, 947.92, 1098.88, 1026.8, 1146.48, 859.52, 969.68, 925.48,
1033.6, 974.44, 1075.76, 1062.16, 1111.8, 1047.88, 1082.56, 1059.44,
1062.16, 1063.52, 1074.4, 1030.2
)), class = "data.frame", row.names = c(
"1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",
"36", "37", "38", "39"
))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.