2015-12-14 3 views
0

ЦельСоздать многослойную площадь участка или «уложены» круг участок

Создать многослойную площадь участка или «уложены» круг участок (смотри рисунок). Круговая диаграмма не нужна.

данные и код штриховой участка

#Data set: 
Numbers  16% 
Frosts  2% 
Doors  6% 
Shelfs  10% 
Earning  -3% 

par(mai=c(2, 1, 1, 1), lwd=2) 
barplot(as.numeric(c(16, 2, 6, 10, -3)), col = c("lightblue"), main="Bar plot", 
     names.arg=c("Numbers","Frosts","Earning", "Doors","Shelfs"), xpd=TRUE, las=2, lwd=2, 
     axes=FALSE, axis.lty=1, cex.axis=1, cex.names=1, cex.main=1, ylim=c(-4, 18), xlim=c(0, 5)) 

два варианта вывода

enter image description here

+2

Как вы предлагаете строить отрицательные значения в круговом графике? – heathobrien

+0

Отрицательные значения (neg) нанесены на график положительными | neg | но все близко к центру и, например, в красном. Также текст должен отображаться, например. -3% и имя, подобное приведенному выше – b4154

+0

Использование mdata <- matrix (nrow = 5, ncol = 1, c (-3, 2, 6, 10, 16)) barplot (mdata, col = c ("lightblue "), main =" Bar plot ", xpd = TRUE, las = 2, lwd = 2, axes = FALSE, axis.lty = 1, cex.axis = 1, cex.names = 1, cex.main = 1); создает строчный график без текста. Но используя func 'text()', я не знаю, как добавить текст, который будет размещаться всегда в центре каждой области или сверху или снизу. – b4154

ответ

2

Это должно сделать вам большую часть пути

library(ggplot2) 
df<- data.frame(value=as.numeric(c(16, 2, 6, 10, -3)), 
       cat=c("Numbers","Frosts","Earning","Doors","Shelfs")) 

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) + 
    geom_bar(stat="identity", colour="grey") + 
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = 3) + 
    scale_fill_manual(values=c("white", "red")) 

Bar Plot

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) + 
    geom_bar(stat="identity", colour="grey") + 
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = -1) + 
    scale_fill_manual(values=c("white", "red")) + 
    coord_polar() 

Circle Plot

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

+0

Есть ли возможность вырезать области с серыми линиями с некоторыми углами, подобными «barplot»? С barplot (..., col = c (...), density = NUM, angle = c (....), ....) вы можете установить цвета, плотность и углы разных штрихов. – b4154

+0

Не легко. Эта ссылка включает некоторые хаки, чтобы это произошло, но это выглядит как много усилий: http://stackoverflow.com/questions/2895319/how-to-add-texture-to-fill-colors-in-ggplot2 – heathobrien

+0

Спасибо ! Кажется, очень сложно: D обходной путь. Возможно, я буду использовать только некоторые серые цвета. – b4154

1

topmost из "Посторонние" ссылки на право должно дать вам большую часть информация, необходимая для построения штабелированного штрихового графика, но адаптированная для вашего использования, будет примерно такой:

# A vertical matrix containing the values 
md <- matrix(c(-3, 16, 2, 6, 10), ncol=1) 
d <- barplot(md, col=c(2, rep(0, 4))) 

# Finding the vertical position for the labels 
ypos <- apply(md, 2, cumsum) 
ypos <- ypos - md/2 
ypos <- t(ypos) 

# I haven't checked if the values and names match 
text(d/3, ypos, adj=c(0, NA), 
    paste(c("Earning","Numbers","Frosts","Doors","Shelfs"), md, sep=": ")) 

enter image description here

1

Вы можете попробовать работать с этим:

library(ggplot2) 
data<-data.frame(Name=c("Earning","Frosts","Doors","Shelfs","Numbers"),Val=c(1,2,6,10,16)) 

ggplot(data,aes(x=factor(1),y=Val,fill=Name))+ 
geom_bar(stat="identity",width=1)+coord_polar() 

Просто измените цветовую палитру и добавить текст, где вы хотите (и, конечно, первое значение в Val столбце, если он слишком большой на графике - соответствует вашему отрицательному значению) enter image description here

Смежные вопросы