wrap a wide image into several lines

Обновить

December 2018

Просмотры

169 раз

5

Я произвожу довольно широкий образ, список последовательных учебных сессий стрельб.

введите описание изображения здесь

В настоящее время это не очень полезно, графический и мне нужно будет получить изображение обернутого в несколько строк, чтобы сделать данные для каждого обучающего набора более заметными. До сих пор я руковожу этим путем введения второй переменной, которая обозначает линию, в которую учебный комплекс принадлежит. Отступать в том, что теперь у меня есть полоска над каждой строкой, которая служит практически нет цели.

введите описание изображения здесь

Другим способом сделать это будет генерировать каждую строку как отдельные фигуры и объединить их с помощью gridExtra«сек grid.arrange.

Я ищу других (изящные) способами упаковки широкий рисунка на несколько строк. Я хотел бы не иметь полосы над каждой гранью, если это возможно. Все предложения приветствуются.

Это код, который я использовал для создания этих изображений.

library(ggplot2)
library(reshape2)

st <- 23 # number of training sets
sk <- 10 # number of shots per training set
dt <- sample(7:10, size = st * sk, prob = c(0.005, 0.15, 0.195, 0.65), replace = TRUE)
rslt <- as.data.frame(matrix(dt, nrow = 10))
names(rslt) <- paste("trening", seq_len(ncol(rslt)), sep = "")

rsltm <- melt(rslt, variable.name = "trening", value.name = "rezultat")
rsltm$trening <- ordered(rsltm$trening) 

n <- 5 # number of trainings per row
st.vrst <- round(st/n)
vrsta <- paste("vrsta", seq_len(st.vrst), sep = "")

rsltm$vrsta <- rep(vrsta, each = sk * n, length.out = nrow(rsltm))
rm(vrsta)

# wide figure
ggplot(rsltm, aes(x = trening, y = rezultat)) + 
   geom_dotplot(binaxis  = "y", stackdir = "center", show_guide = FALSE) +
   scale_fill_manual(values = rep("red", st)) +
   theme_bw()

# wrapped figure
ggplot(rsltm, aes(x = trening, y = rezultat, fill = trening)) + 
   geom_dotplot(binaxis  = "y", stackdir = "center", show_guide = FALSE) +
   scale_fill_manual(values = rep("red", st)) +
   facet_wrap(~vrsta, nrow = st.vrst, scales = "free_x") +
   theme_bw()

1 ответы

4

Для удаления текста полосы над небольшими участками , которые можно задать elemnt_blank()для этих элементов.

# wrapped figure
ggplot(rsltm, aes(x = trening, y = rezultat, fill = trening)) + 
  geom_dotplot(binaxis  = "y", stackdir = "center", show_guide = FALSE) +
  scale_fill_manual(values = rep("red", st)) +
  facet_wrap(~vrsta, nrow = st.vrst, scales = "free_x") +
  theme_bw() + theme(strip.text=element_blank(),
                     strip.background=element_blank())

EDIT - обновление производства участка

Один из способов улучшить участок может быть размещение treningметок внутри области участка.

Для этого новый кадр данных df.namesпроизводится. Количество строк соответствуют уровням trening.

df.names<-data.frame(lab.nam=unique(rsltm$trening), #labels
       x=rep(1:5, times = 5, length.out = 23), #x coordinate (1:5)
       y=rep(11,23), #y coordinate (11)
       vrsta=rep(vrsta, each = 5, length.out = 23)) #vrsta values to ensure position in facets 

Код для создания участка без оси х меток. panel.margin=гарантирует , что пространство между гранями меньше.

p <- ggplot(rsltm, aes(x = trening, y = rezultat)) + 
      geom_dotplot(binaxis  = "y", stackdir = "center", show_guide = FALSE) +
      scale_fill_manual(values = rep("red", st)) +
      facet_wrap(~vrsta, nrow = st.vrst, scales = "free_x") +
      theme_bw() + theme(strip.text=element_blank(),
                     strip.background=element_blank(),
                     panel.margin = unit(-0.6, "lines"),
                     panel.grid.minor=element_blank()) + 
  scale_y_continuous(limits=c(7.5,11.5),breaks=c(8,9,10)) +
  scale_x_discrete(breaks=NULL)

С geom_text()места этикетками выше точек.

p +  geom_text(data=df.names,aes(x, y, label=lab.nam),size=4)

введите описание изображения здесь