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
Выход
Вы можете добавить alpha = 0.5
к своему выражению geom_bar()
, чтобы сделать столбики прозрачными. Это позволит увидеть оба бара. Добавление этого оператора alpha
и ничего больше не даст того, что вы ищете, чтобы сделать видимыми обе накладные полосы. Цвета, однако, затрудняют просмотр двух разных полос.
Другой (и, возможно, лучший) вариант - изменить порядок создания графика. Если я правильно помню, 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
, обе полосы легче увидеть. Вы можете поиграть с легендой, чтобы отобразить «Вниз» перед «Вверх», если это необходимо.
Обратите внимание, что предоставление машиночитаемых данных имеет большое значение, позволяя другим помочь вам. Попробуйте использовать dput()
для вывода ваших данных в следующий раз, а не вставлять их. Также обратите внимание, что вы можете «связать» вместе ggplot()
операторы с +
. Это делает код намного компактнее и легче для чтения.