Проблема решает! Всем спасибо! (решение внизу этого сообщения)ggplot: значения оси y (разрывы) из уложенной пропорциональной гистограммы?
Мне нравится создавать штабелированную пропорциональную гистограмму с ggplot. Моя проблема - это разрывы оси y, которые, как представляется, относятся к процентному значению каждой плитки, но не находятся в пределах от 0 до 100, как ожидалось.
Вот мой кадр данных:
fg grp prc
1 1 g1 85.23
2 2 g1 14.77
3 1 g2 73.33
4 2 g2 26.67
5 1 g3 85.53
6 2 g3 14.47
7 1 g4 87.18
8 2 g4 12.82
9 1 g5 72.22
10 2 g5 27.78
Это, как я вызываю функцию участка:
require(ggplot2)
ggplot(mydat, aes(x=grp, y=prc, fill=fg)) +
geom_bar(stat="identity", colour="black", show_guide=FALSE) +
scale_fill_manual(values=c("#235a80", "#80acc8")) +
labs(title=NULL, x="Cluster-Gruppen", y=NULL) +
theme(axis.line = element_line(colour="gray"),
axis.text = element_text(size=rel(1.3)),
axis.title = element_text(face="italic", size=rel(1.4)))
И, наконец, это мой результат:
Как вы можете видеть, что оси Y-оси соответствуют процентным значениям prc-va riable.
Я хотел бы иметь диапазон у-оси от 0 до 100, с разрывами на каждой 10-й позиции (seq(0,100,by=10)
). Нужно ли мне каким-либо образом подготовить мои данные? Как мне «исправить» ось y?
Заранее спасибо
Это способ, как рассчитать данные и рабочее решение!
clusterDiskriminanz <- function(myData, groups, gcnt) {
disc <- lda(groups ~ ., data=myData, na.action="na.omit", CV=TRUE)
ct <- table(groups, disc$class)
dg <- diag(prop.table(ct, 1))
# print barplot for correct percentage for each category of groups
newdat <- NULL
tmpdat <- NULL
filldat <- NULL
perc <- round(100*dg,2)
percrest <- round(100-perc,2)
# looks strange, but for testing purposes
# I add data this way. Perhaps I also lack
# a bit of functions which may do this better and faster
for (i in 1:gcnt) {
newdat <- rbind(newdat, c(paste("g",i,sep="")))
newdat <- rbind(newdat, c(paste("g",i,sep="")))
tmpdat <- rbind(tmpdat, perc[i])
tmpdat <- rbind(tmpdat, percrest[i])
filldat <- rbind(filldat, "1")
filldat <- rbind(filldat, "2")
}
# create data frame! prc-values are treated as numeric
# now! need to convert $g to factors though!
mydat <- data.frame(filldat, newdat, tmpdat)
names(mydat) <- c("fg", "grp", "prc")
mydat$fg <- factor(mydat$fg)
# ggplot-stuff comes here...
require(ggplot2)
ggplot(mydat, aes(x=grp, y=prc, fill=fg)) +
geom_bar(stat="identity", colour="black", show_guide=FALSE) +
scale_fill_manual(values=c("#235a80", "#80acc8")) +
labs(title=NULL, x="Cluster-Gruppen", y=NULL) +
geom_hline(yintercept=totalcorrect, linetype=2, colour="white", alpha=0.8) +
# Achsenbeschriftung etwas größer machen
theme(axis.line = element_line(colour="gray"),
axis.text = element_text(size=rel(1.3)),
axis.title = element_text(face="italic", size=rel(1.4))) +
scale_y_continuous(breaks = seq(0, 100, 10)) +
coord_cartesian(ylim=c(0,100))
}
Я полагаю, что переменная PRC рассматривается как фактор (только таким образом я могу получить масштаб y так же, как ваш). Попробуйте str (mydat), чтобы увидеть тип всех столбцов. Я бы предложил удалить из вашей функциональной строки newdat <-cbind (filldat, newdat, tmpdat) и использовать mydat <-data.frame (filldat, newdat, tmpdat) –
Спасибо большое, теперь я получил его! Команда str помогла показать мне недостающую информацию. Действительно, $ prc рассматривался как фактор и просто использовал mydat <-data.frame (filldat, newdat, tmpdat) и преобразовывал $ fg в обработанные факторы. – Daniel