2017-10-26 9 views
2

付属の画像に示すように、Rピラミッドプロットに滑らかなライン(図の太い黒いライン)を追加してください。あなたの助けに感謝。 This plot shows the population distribution according to the age and gender。 (むしろ基地Rグラフィックよりggplotを使用して)以下の約Rピラミッドプロットにスムーズラインを追加

xy.pop<-c(3.2,3.5,3.6,3.6,3.5,3.5,3.9,3.7,3.9,3.5,3.2,2.8,2.2,1.8,1.5,1.3,0.7,0.4) 
xx.pop<-c(3.2,3.4,3.5,3.5,3.5,3.7,4,3.8,3.9,3.6,3.2,2.5,2,1.7,1.5,1.3,1,0.8) 
agelabels<-c("0-4","5-9","10-14","15-19","20-24","25-29","30-34", 
     "35-39","40-44","45-49","50-54","55-59","60-64","65-69","70-74", 
     "75-79","80-44","85+") 
mcol<-color.gradient(c(0,0,0.5,1),c(0,0,0.5,1),c(1,1,0.5,1),18) 
fcol<-color.gradient(c(1,1,0.5,1),c(0.5,0.5,0.5,1),c(0.5,0.5,0.5,1),18) 
par(mar=pyramid.plot(xy.pop,xx.pop,labels=agelabels,main="Australian population pyramid 2002",lxcol=mcol,rxcol=fcol,)) 
+0

イメージを始める人々を助けるために非常に有用ではありません。サンプルデータとコードを投稿してプロットを生成できますか?それから私たちはそこから取り出すことができます。 –

+0

私が使用したコードを掲載していただき誠に申し訳ございません。私はちょうどコードスニペットを投稿しました。ご意見ありがとうございます。 – Lank

答えて

4

方法。

# Your data 
xy.pop<-c(3.2,3.5,3.6,3.6,3.5,3.5,3.9,3.7,3.9,3.5,3.2,2.8,2.2,1.8,1.5,1.3,0.7,0.4) 
xx.pop<-c(3.2,3.4,3.5,3.5,3.5,3.7,4,3.8,3.9,3.6,3.2,2.5,2,1.7,1.5,1.3,1,0.8) 
agelabels<-c("0-4","5-9","10-14","15-19","20-24","25-29","30-34", 
      "35-39","40-44","45-49","50-54","55-59","60-64","65-69","70-74", 
      "75-79","80-44","85+") 

# Collect data in dataframe 
df <- rbind.data.frame(
    cbind.data.frame(Percentage = -xy.pop, Group = agelabels, Gender = "male"), 
    cbind.data.frame(Percentage = +xx.pop, Group = agelabels, Gender = "female")); 

# Make sure agelabels have the right order 
df$Group <- factor(df$Group, levels = agelabels); 

# (gg)plot 
gg <- ggplot(
    data = df, 
    aes(x = Group, y = Percentage, fill = Gender, group = Gender)); 
gg <- gg + geom_bar(data = subset(df, Gender == "female"), stat = "identity"); 
gg <- gg + geom_bar(data = subset(df, Gender == "male"), stat = "identity"); 
gg <- gg + coord_flip(); 
gg <- gg + geom_smooth(
    colour = "black", method = "loess", se = FALSE, show.legend = FALSE, size = 0.5); 
gg <- gg + labs(
    x = "Age", 
    y = "Percentage", 
    title = "Australian population pyramid 2012"); 
gg <- gg + scale_y_continuous(
    breaks = seq(-4, 4, by = 2), 
    labels = c(rev(seq(0, 4, by = 2)), seq(2, 4, by = 2))); 
print(gg); 

enter image description here

私はここ(group美的経由)男性と女性のピラミッドの半分の両方に別々にLOESS曲線をフィッティングしています。

あなたと同じプロットではありませんが、改善や調整の余地がまだあります。たとえば、バーのパーセンテージに応じた塗りつぶしを実現するために、審美的にfillを変更することができます。

クレジットの対象となるクレジット:このソリューションは、@DidzisElfertsのthis postに基づいています。ここで

+0

あなたの迅速な対応に感謝します。あなたの答えは現時点で私の要求に合っています。 – Lank

+0

心配はいりません。それが助けてくれてうれしい。 –

1

plotrixpyramid.plot関数で使用してソリューションです:

library(plotrix) 

pyramid.plot(xy.pop,xx.pop,labels=agelabels, 
      main="Australian population pyramid 2002",lxcol=mcol,rxcol=fcol) 

male.smline <- loess.smooth(x=1:18, y=xy.pop, degree=2) 
lines(-1-male.smline$y, male.smline$x, col="red", lwd=3) 

female.smline <- loess.smooth(x=1:18, y=xx.pop, degree=2) 
lines(1+female.smline$y, female.smline$x, col="black", lwd=3) 

enter image description here

+0

マルコさん、ありがとう! – Lank

+0

@Lank私はあなたがそれを好きになりました!どうか、私の答えをアップアップしてみることができますか?ありがとうございました。 –