ggplot2: geom_bar (); как изменить порядок заполнения, чтобы бары не терялись внутри баров с более высоким значением?

Swift 4 Решение для создания UICollectionViewCell round и добавления Shadows без каких-либо расширений и осложнений:)

Примечание. Для простых видов, например кнопок. См. Ответ @ suragch's в этом сообщении. https://stackoverflow.com/a/34984063/7698092 . Протестировано успешно для кнопок

В случае, если кто-то все еще пытается обогнуть углы и одновременно добавлять тени. Хотя это решение работает с UICollectionViewCell, оно может быть обобщено на любой взгляд.

Этот метод работал для меня без каких-либо расширений и всех сложных вещей. Я работаю с storyBoard.

Technique

Вы должны добавить UIView (скажем, «containerView») внутри вашего UICollectionViewCell в storyBoard и добавить все необходимые представления (кнопки, изображения и т. д.) внутри этого контейнера. См. Скриншот.

Подключите розетку для контейнераView. Добавьте следующие строки кода в функцию делегата CellforItemAtIndexPath.

//adds shadow to the layer of cell

cell.layer.cornerRadius = 3.0
    cell.layer.masksToBounds = false
    cell.layer.shadowColor = UIColor.black.cgColor
    cell.layer.shadowOffset = CGSize(width: 0, height: 0)
    cell.layer.shadowOpacity = 0.6

//makes the cell round 

let containerView = cell.containerView!
    containerView.layer.cornerRadius = 8
    containerView.clipsToBounds = true

Выход

См. Симулятор Скриншот

1
задан Z.Lin 22 January 2019 в 08:07
поделиться

1 ответ

Вы можете добавить alpha = 0.5 к своему выражению geom_bar(), чтобы сделать столбики прозрачными. Это позволит увидеть оба бара. Добавление этого оператора alpha и ничего больше не даст того, что вы ищете, чтобы сделать видимыми обе накладные полосы. Цвета, однако, затрудняют просмотр двух разных полос.

enter image description here

Другой (и, возможно, лучший) вариант - изменить порядок создания графика. Если я правильно помню, ggplot построит столбцы в алфавитном или числовом или факторном порядке. Здесь ваши значения expression равны c("Down", "Up"), а сначала отображается "Down". Если вы заставите "Up" быть нанесенным в первую очередь, вы также можете решить эту проблему.

library(dplyr)
library(ggplot2)

dat <- 
  read.table(text = "condition hours expression freq_genes
1      tofde     9         up         27
2      tofde    12         up         92
3      tofde    15         up        628
17     tofde     9       down          0
18     tofde    12       down          1
19     tofde    15       down          0
33      tofp     9         up       2462
34      tofp    12         up        786
35      tofp    15         up        298
49      tofp     9       down        651
50      tofp    12       down        982
51      tofp    15       down       1034
65       tos     0         up         27
66       tos     3         up        123
67       tos     6         up        752
81       tos     0       down          1
82       tos     3       down         98
83       tos     6       down        594") %>%
  mutate(expression2 = ifelse(expression == "up", 1, 2))

dat %>%
ggplot(aes(x = hours, y = freq_genes, group = condition, 
           fill = factor(expression2, labels=c("Up", "Down")))) +
  labs(fill="Expression") + 
  geom_bar(stat = "identity", position = "dodge", width = 2.5, alpha = 0.5) + 
  scale_fill_manual(values=c("#9ecae1", "#3182bd")) + 
  xlab("Time (Hours)") + 
  scale_x_continuous(breaks = seq(min(dat$freq_genes), 
                                  max(dat$freq_genes),
                                  by = 3)) + 
  ylab("Gene Frequency") + 
  facet_grid(. ~ condition, scales = "free") + 
  theme_bw() + 
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        legend.position = "bottom", 
        axis.text.x = element_text(angle = 90))

Здесь я создал новый столбец под названием expression2, который является просто числовой версией expression. Я изменил переменную fill в aes(), чтобы она соответствовала этим новым меткам. Я оставил цвета в scale_fill_manual() так же, как в вашем первоначальном утверждении, и сохранил значение alpha. «Вниз» наносится поверх «Вверх», но, сохраняя одинаковые цвета со значением alpha, обе полосы легче увидеть. Вы можете поиграть с легендой, чтобы отобразить «Вниз» перед «Вверх», если это необходимо.

enter image description here

Обратите внимание, что предоставление машиночитаемых данных имеет большое значение, позволяя другим помочь вам. Попробуйте использовать dput() для вывода ваших данных в следующий раз, а не вставлять их. Также обратите внимание, что вы можете «связать» вместе ggplot() операторы с +. Это делает код намного компактнее и легче для чтения.

0
ответ дан Steven 22 January 2019 в 08:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: