2017-08-21 1 views
-1

Beispieldaten -Teile einer Zelle in einen separaten Heatmap/mit mehrere Farbcode

Country segments variable value 
     US A Kerosene 16.09 
     US B Kerosene 2.81 
     US C Kerosene -7.96 
     US D Kerosene 25.76 
     US E Kerosene 75.47 
     US A Petrol 26.82 
     US B Petrol 8.72 
     US C Petrol 2.07 
     US D Petrol 16 
     US E Petrol -11 
     US A Edible Oil 4.02 
     US B Edible Oil 10.6 
     US C Edible Oil 49.05 
     US D Edible Oil 16.07 
     US E Edible Oil 51.87 
     US A LPG -1.07 
     US B LPG 49.19 
     US C LPG 37.9 
     US D LPG 33.05 
     US E LPG 102 

Das sind die Daten für die US-gesetzt, wie dass ich Datensatz von 14 anderen Ländern in der Datei. Jetzt mache ich 15 Tage eine separate Heatmap im hierarchischen Ansatz. Die x-Achse ist die Variable und die y-Achse die Segmente und die Heatmap mit zugehörigen Werten für jedes Land.

Was ich dachte ist, eine einzige Folie mit allen Ländern zu machen. Das Endergebnis mit der y-Achse ist also gleich den Segmenten, x-Achse mit Ländern und jeder Zelle ist eine Heatmap mit vier verschiedenen Variablen und entsprechenden Werten in einer einzelnen Zelle.

Jede Hilfe wird von großer- Jede Idee, wie ich eine einzelne Zelle zu einer Heapmap mit vier verschiedenen Werten und Farbcode Code und machen kann.Etwas wie unten - Das wird ein Beispiel für 8 Länder und 4 Segmente mit sein 4 Variablen.

Something like below - That will be an example of 8 countries and 4 segments with 4 variables

Antwort

1

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.

enter image description here

+0

Danke @ Brian .. Ihre Hilfe zu schätzen, als Antwort akzeptiert :-) – Sam

Verwandte Themen