Я новичок, и у меня возник вопрос о цвете многослойной диаграммы. Позвольте мне предварить это, сказав, что я искал ответы, прежде чем задавать этот вопрос, но я настолько новичок в построении графиков R, что, возможно, я не использую правильный поисковый запрос.
Теперь у меня есть матрица, которую я хотел бы построить с помощью гистограммы с накоплением, используя положительные и отрицательные значения. Мне удалось это сделать (с некоторой помощью), но я не могу заставить полоски принимать разные цвета для положительных и отрицательных значений. Вот что я написал:
dataset<-as.matrix(read.csv("skin_2hr.csv", header=T, row.names=1))
colors <-c("139", "orange", "132","purple","navy","forestgreen")
barcenter<-barplot(t(dataset[,3:2]), density=c(10,40,20,40,20,40),
main = "Skin 2hr Post Exposure",
xlab=expression(paste("kJ/m"^"2",4100K FL")), ylab = "number of genes",
names.arg=rownames(dataset),
ylim=c(-150,500), col=colors)
lines(barcenter,dataset[,1])
box()
legend("topleft", legend=rownames(dataset), col=colors,
pch=15, bty = "n")
По какой-то причине все полосы окрашены в оранжевый цвет.
Матрица данных представлена ниже:
Total UP DOWN
1 113 92 -21
2 216 130 -86
4 406 266 -140
8 183 136 -47
16 150 119 -31
32 178 144 -34
Возможно ли, чтобы положительные значения цвета штриховой диаграммы отличались от отрицательных значений в столбчатой диаграмме с накоплением? Если да, не могли бы вы предложить, как это сделать?
Да, вот так:
структура (c (113L, 216L, 406L, 183L, 150L, 178L, 92L, 130L, 266L, 136L, 119L, 144L, -21L, -86L, -140L, -47L, -31L, -34L), .Dim = c (6L, 3L), .Dimnames = list (c («1», «2», «4», «8», «16», «32»), c («Всего», «ВВЕРХ», « ВНИЗ")))
Цвета можно изменять один за другим в "scale_fill_manual" с помощью руководства вроде Вот этот.
dataset<-structure(c(113L, 216L, 406L, 183L, 150L, 178L, 92L, 130L, 266L, 136L, 119L, 144L, -21L, -86L, -140L, -47L, -31L, -34L), .Dim = c(6L, 3L), .Dimnames = list(c("1", "2", "4", "8", "16", "32"), c("Total", "UP", "DOWN")))
dataset<-as.data.frame(dataset)
dataset$id<-rownames(dataset)
dataset<-cbind(melt(dataset)[7:18,],dataset$Total)
names(dataset)[names(dataset)= = "dataset$Total"]<-"Total"
dataset$variable<-letters[1:nrow(dataset)]
dataset2<-dataset[1:6,c(1,4)]
Вам понадобится ggplot2, который очень полезен для графиков.
#install.packages("ggplot2")
library(ggplot2)
ggplot(dataset2, aes(factor(id,levels=dataset2$id), Total, group=1, colour=1)) +
geom_line(show.legend=F) +
geom_point(size=1, shape=16,show.legend=F) +
geom_bar(data=dataset, aes(x=id,y=value,fill=variable), stat = "identity",position = "identity",show.legend=F)+
ylab(paste("number of genes")) + xlab(expression("kJ / m"^"2"))+
ggtitle("Skin 2hr Post Exposure")+
guides(fill=FALSE)+#turns off color legend for above/below 0
theme(legend.position = "none")+
# scale_fill_brewer(palette = "Set3")+
scale_fill_manual(values=c("orange", "black","green","yellow","white","red","pink","blue","brown","magenta","lightgray","lightblue"))+
theme_bw()
Спасибо за информацию. Как я могу определить цвета для уточнения назначения цветов?
См. Правки. scale_fill_brewer()
может принимать палитры цветов, в которых достаточно цветов для всех 12 полос. Или вы можете изменить «переменную» на меньшее количество групп.
Не могли бы вы показать нам
dput(dataset)
ваших данных? Или, если очень большой,dput()
изhead(dataset, 20)