TestMap <- Read.Table ("R / Test", Header = True, Sep = "T")

Testmap

     Models         Group Brands  Presence Country
1    Xperia Z5      A     Sony    1        Japan
2    Galaxy S20     A     Samsung 1        Korea
3    Xperia XZ      B     Sony    1        Japan
4    Galaxy Note FE B     Samsung 0        Korea
5    Nord           A     OnePlus 1        China

Uzyskałem obecność / brak modeli wykreślonych na podstawie kraju z poniższym kodem.

ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
  geom_tile() + xlab(label="Country")+ ylab(label="Models")+
  scale_fill_gradient(low="white",high="black")+
  theme_bw() + theme(legend.position="none")

Testmap.jpg. Graph1

Chciałbym grupować modele zgodnie z ich odpowiednimi markami. (Technicznie narysuj wspornik kwadratowy, aby pokazać każdą grupę marki).

Próbowałem z Facet_grid, jak sugerowano w poprzednim poście, ale zgrupowałem modele w obszarze działki. Chciałbym zachować cały obszar działki jako jeden. Czy można wygenerować wykres dokładnie jak powyżej, ale tylko przy użyciu nawiasów kwadratowych, aby podnieść je zgodnie z marką?

Próba facet_grid:

ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
  geom_tile() + xlab(label="Country")+ ylab(label="Models")+
  scale_fill_gradient(low="white",high="black")+
  facet_grid(Brands ~., scales="free", space="free_y",switch="y")+
  theme_bw() + theme(strip.placement="outside", strip.background=element_rect(fill="white"), axis.title=element_blank(),legend.position="none",strip.text.y.left = element_text(angle = 0))
0
web 12 marzec 2021, 19:15

2 odpowiedzi

Najlepsza odpowiedź

Dzięki pomocy Henrika i Sinh Nguyen udało mi się uzyskać, co chciałbym mieć - konkretnie: kwadratowy wspornik, aby grupować etykietę osi Y.

library(ggplot2)
library(grid)
library(pBrackets)
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
  geom_tile() + xlab(label="Country")+ ylab(label="Models\n\n\n\n\n\n\n\n")+
  scale_fill_gradient(low="white",high="black")+
  theme_bw() + theme(legend.position="none")

grid.locator(unit="native")

grid.brackets(140, 198, 140, 78, lwd=1, ticks=NA, type = 4)
grid.brackets(140, 321, 140, 320, lwd=0.5, ticks=NA, type = 4)
grid.brackets(140, 556, 140, 436, lwd=1, ticks=NA, type = 4)

grid.text(x=unit(35,'native'), y=unit(140,'native'),
  label=expression(paste('Sony'),'type=4'), hjust = 0, vjust=0)
grid.text(x=unit(35,'native'), y=unit(325,'native'),
  label=expression(paste('OnePlus'),'type=4'), hjust = 0, vjust=0)
grid.text(x=unit(35,'native'), y=unit(496,'native'),
  label=expression(paste('Samsung'),'type=4'), hjust = 0, vjust=0)

Użyłem grid.locator(unit="native"), aby oszacować pozycję. Było "oszacowane", ponieważ wsporniki wydawały się nieco z dala od zamierzonej pozycji.

Również h w grid.brackets można użyć do regulacji poziomej długości wsporników.

Istnieje większą elastyczność na temat typu i regulacji do nawiasów i czcionek, który jest dostępny w podręczniku: https://cran.r-project.org/web/packages/pbractes/pbractes.pdf

Graph1+

Nie było idealne, ale przynajmniej rozwiązało problem. , ale wciąż mile widziam jakąkolwiek sugestię, aby poprawić wizualizację.

Mam nadzieję, że ta odpowiedź będzie pomocna dla kogoś z tym samym problemem!

Dzięki!

1
web 15 marzec 2021, 03:54

Oto jedna próba. Nadal dowiedzieć się, jak prawidłowo dodać tekst do osi Y. Choć jest to bardzo ręczne i trudne do skalowania.

library(tidyverse)
library(grid)
library(pBrackets)

testmap <- tribble(
  ~Models, ~Group, ~Brands, ~Presence, ~Country,
  "Xperia Z5", "A", "Sony", 1, "Japan",
  "Galaxy S20", "A", "Samsung", 1, "Korea",
  "Xperia XZ", "B", "Sony", 1, "Japan",
  "Galaxy Note FE", "B", "Samsung", 0, "Korea",
  "Nord", "A", "OnePlus", 1, "China")
)
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
  geom_tile() + xlab(label="Country")+ ylab(label="Models\n\n")+
  scale_fill_gradient(name="Presence of Models", low="white",high="black")+
  theme_bw() + theme(legend.position="none")

# using grid.locator to identify the coordinate for brackets
grid.locator(unit = "native")

# add bracket to plot area
grid.brackets(60, 134, 60, 32, type = 1)
grid.brackets(60, 233, 60, 157, type = 1)
grid.brackets(60, 353, 60, 247, type = 1)

Wynik:

enter image description here

1
Sinh Nguyen 13 marzec 2021, 15:18