Da Sie keine vollständige reproduzierbaren Beispiel (oder einen Code, den Sie bereits versucht haben) vorsah, habe ich einige Dummy-Daten bis zu zeigen, wie Sie es tun könnte.
library(dplyr)
library(ggplot2)
fake.df <-
expand.grid(Country = c("US", "Canada", "Mexico"),
segments = LETTERS[1:5],
variable = c("Kerosene", "Petrol",
"Edible Oil", "LPG")) %>%
mutate(value = runif(length(Country), -20, 50))
fake.df.adj <-
fake.df %>%
mutate(xadj = ifelse(variable %in% c("Kerosene", "Edible Oil"), -0.33/2, 0.33/2),
yadj = ifelse(variable %in% c("Kerosene", "Petrol"), 0.33/2, -0.33/2),
xpos = as.numeric(factor(Country)) + xadj,
ypos = as.numeric(factor(segments)) + yadj)
Der mutate
Code erstellt eine Schachtel mit Anpassungen um jeden Mittelpunkt Sie zeichnen möchten. Bei "Kerosin" und "Speiseöl" werden diese Kacheln um 1/3 des Abstandes zwischen jedem Country
nach links verschoben (so dass die Mitte jeder Kachel -0,33/2 ist); die anderen sind nach rechts verschoben. Dasselbe gilt für die y-Einstellung, aber nach oben und unten statt nach links und rechts.
Dann konvertieren Sie Ihre Faktoren (Country
und segments
) in numerische Positionen und fügen sie zusammen.
fake.df.adj
Country segments variable value xadj yadj xpos ypos
1 US A Kerosene -11.8318607 -0.165 0.165 0.835 1.165
2 Canada A Kerosene 39.1181835 -0.165 0.165 1.835 1.165
3 Mexico A Kerosene 25.9354644 -0.165 0.165 2.835 1.165
4 US B Kerosene -19.3503525 -0.165 0.165 0.835 2.165
5 Canada B Kerosene -12.4459506 -0.165 0.165 1.835 2.165
6 Mexico B Kerosene 9.9017016 -0.165 0.165 2.835 2.165
7 US C Kerosene 37.9767562 -0.165 0.165 0.835 3.165
8 Canada C Kerosene 3.4687111 -0.165 0.165 1.835 3.165
9 Mexico C Kerosene 0.6280239 -0.165 0.165 2.835 3.165
10 US D Kerosene 43.4739464 -0.165 0.165 0.835 4.165
11 Canada D Kerosene 8.4671510 -0.165 0.165 1.835 4.165
12 Mexico D Kerosene 19.7357609 -0.165 0.165 2.835 4.165
13 US E Kerosene -2.6120700 -0.165 0.165 0.835 5.165
14 Canada E Kerosene -10.6013792 -0.165 0.165 1.835 5.165
15 Mexico E Kerosene -6.2059698 -0.165 0.165 2.835 5.165
16 US A Petrol 17.1079974 0.165 0.165 1.165 1.165
17 Canada A Petrol 46.8944785 0.165 0.165 2.165 1.165
18 Mexico A Petrol 9.3977815 0.165 0.165 3.165 1.165
19 US B Petrol 38.7547489 0.165 0.165 1.165 2.165
20 Canada B Petrol -14.4210703 0.165 0.165 2.165 2.165
21 Mexico B Petrol 32.5160861 0.165 0.165 3.165 2.165
22 US C Petrol -1.3750645 0.165 0.165 1.165 3.165
23 Canada C Petrol 17.0540527 0.165 0.165 2.165 3.165
24 Mexico C Petrol -16.8449931 0.165 0.165 3.165 3.165
25 US D Petrol 33.8465349 0.165 0.165 1.165 4.165
26 Canada D Petrol 43.7369153 0.165 0.165 2.165 4.165
27 Mexico D Petrol 32.2145640 0.165 0.165 3.165 4.165
28 US E Petrol -13.1811532 0.165 0.165 1.165 5.165
29 Canada E Petrol 46.1913082 0.165 0.165 2.165 5.165
30 Mexico E Petrol -7.5030316 0.165 0.165 3.165 5.165
31 US A Edible Oil 36.1643957 -0.165 -0.165 0.835 0.835
32 Canada A Edible Oil 26.9887728 -0.165 -0.165 1.835 0.835
33 Mexico A Edible Oil 9.2825143 -0.165 -0.165 2.835 0.835
34 US B Edible Oil 32.7455557 -0.165 -0.165 0.835 1.835
35 Canada B Edible Oil 9.0447777 -0.165 -0.165 1.835 1.835
36 Mexico B Edible Oil 21.5822081 -0.165 -0.165 2.835 1.835
37 US C Edible Oil 2.3906442 -0.165 -0.165 0.835 2.835
38 Canada C Edible Oil 25.2536855 -0.165 -0.165 1.835 2.835
39 Mexico C Edible Oil 5.0618632 -0.165 -0.165 2.835 2.835
40 US D Edible Oil 41.0292115 -0.165 -0.165 0.835 3.835
41 Canada D Edible Oil 8.4515698 -0.165 -0.165 1.835 3.835
42 Mexico D Edible Oil 11.9080938 -0.165 -0.165 2.835 3.835
43 US E Edible Oil 42.2518838 -0.165 -0.165 0.835 4.835
44 Canada E Edible Oil 25.6458033 -0.165 -0.165 1.835 4.835
45 Mexico E Edible Oil -19.3037443 -0.165 -0.165 2.835 4.835
46 US A LPG 25.8891215 0.165 -0.165 1.165 0.835
47 Canada A LPG -3.1028641 0.165 -0.165 2.165 0.835
48 Mexico A LPG 47.5884154 0.165 -0.165 3.165 0.835
49 US B LPG 11.3000701 0.165 -0.165 1.165 1.835
50 Canada B LPG 26.8041755 0.165 -0.165 2.165 1.835
51 Mexico B LPG -13.0209453 0.165 -0.165 3.165 1.835
52 US C LPG -5.5292231 0.165 -0.165 1.165 2.835
53 Canada C LPG 46.3101034 0.165 -0.165 2.165 2.835
54 Mexico C LPG 19.7622448 0.165 -0.165 3.165 2.835
55 US D LPG 8.5258791 0.165 -0.165 1.165 3.835
56 Canada D LPG 20.5856857 0.165 -0.165 2.165 3.835
57 Mexico D LPG -10.7589733 0.165 -0.165 3.165 3.835
58 US E LPG 14.8577291 0.165 -0.165 1.165 4.835
59 Canada E LPG -6.9590007 0.165 -0.165 2.165 4.835
60 Mexico E LPG -3.1651872 0.165 -0.165 3.165 4.835
fake.df.adj %>%
ggplot(aes(xpos, ypos, fill = value)) +
geom_tile(height = 0.33, width = 0.33) +
geom_text(aes(label = paste0(round(value, 1), "%"),
color = value < 30), show.legend = F) +
geom_text(data = fake.df.adj %>% filter(Country == "Mexico", segments == "E"),
aes(label = variable,
y = ypos + 1.75*yadj),
fontface = "bold") +
scale_fill_gradient2(labels = function(breaks) paste0(breaks, "%")) +
scale_color_manual(values = c("FALSE" = "white", "TRUE" = "black")) +
scale_x_continuous(breaks = 1:3, name = NULL,
labels = levels(fake.df$Country)) +
scale_y_continuous(breaks = 1:5, name = "Segments",
labels = levels(fake.df$segments)) +
theme_classic()
Jetzt können Sie zeichnen geom_tile
verwenden, die Höhe und Breite der Fliesen Einstellung 0.33 zu sein.
Ich fügte die Beschriftungen auf jeder Kachel, auf eine Dezimalstelle gerundet, mit einem% -Zeichen hinzu. Um sie schön vor dem dunklen Hintergrund erscheinen zu lassen, füllte ich die Farbästhetik für die Etiketten mit einem logischen Ausdruck, um dann diese Werte weiter nach Schwarz und Weiß abzubilden.
Dann gibt es keine Möglichkeit zu sagen, welche der vier Typen von variable
in welcher Kachel sind, also beschrifte ich die in der oberen rechten Ecke, indem ich die Daten nur nach Mexiko und E filtriere und die y-Position etwas verschiebe weiter als die Mitte der Kachel mit dem gleichen Einstellwert wie zuvor.
Dann fügte ich eine divergierende Füllpalette hinzu und beschriftete die Farbleiste mit% -Zeichen.
Dann müssen Sie die Beschriftungen für die X- und Y-Skalen angeben, da sie gerade numerische Positionen sind.
Danke @ Brian .. Ihre Hilfe zu schätzen, als Antwort akzeptiert :-) – Sam