6

いくつかのx軸ラベルを使用していくつかのデータの棒グラフをプロットしたいのですが、軸のスケーリングが完全に立ち入り禁止であり、ラベルがバーの下に間違って配置されているため、これまでのところ同じ問題が発生し続けています。私が考えることができる最も簡単な例:

x = c(1:81)
barplot(x)
axis(side=1,at=c(0,20,40,60,80),labels=c(20,40,60,80,100))

ご覧のとおり、x軸はプロット全体に沿って伸びるのではなく、その間のどこかで止まります。問題は非常に単純なように思えますが、どういうわけか私はそれを修正することができず、これまでのところ解決策を見つけることができませんでした:(

どんな助けでも大歓迎です。

4

3 に答える 3

13

問題は、barplot実際には数値データではなくカテゴリ データをプロットするように設計されているため、横軸スケールの設定に関して独自の処理を行うことです。これを回避する主な方法は、結果を変数に保存することにより、バーの中点の実際の x 位置を回復するbarplotことですが、以下に示すように、必要なことを行うエレガントな方法を思いつきませんでしたベースグラフィック。たぶん、他の誰かがもっとうまくやれるでしょう。

x = c(1:81)
b <- barplot(x)
## axis(side=1,at=c(0,20,40,60,80),labels=c(20,40,60,80,100))
head(b)

ここで、実際の中点の位置が 0.7、1.9、3.1、... であることがわかります -- 1、2、3 ... ではありません。

軸を 0 から 100 に拡張したくない場合、これは非常に簡単です。

b <- barplot(x)
axis(side=1,at=b[c(20,40,60,80)],labels=seq(20,80,by=20))

これは、ベースグラフィックスでそれを行うための私のベストショットです:

b <- barplot(x,xlim=c(0,120))
bdiff <- diff(b)[1]
axis(side=1,at=c(b[1]-bdiff,b[c(20,40,60,80)],b[81]+19*bdiff),
              labels=seq(0,100,by=20))

これを試すことができますが、バーはそれほどきれいではありません:

plot(x,type="h",lwd=4,col="gray",xlim=c(0,100))

またはでggplot

library(ggplot2)
d <- data.frame(x=1:81)
ggplot(d,aes(x=x,y=x))+geom_bar(stat="identity",fill="lightblue",
                   colour="gray")+xlim(c(0,100))

ほとんどの統計グラフィックのオタクは、定量的な (x,y) データのグラフ化は棒グラフよりも点や線で行う方がよいと言うでしょう (非データ インク、Tufte、何とか何とか :-) )

于 2011-11-27T14:45:05.070 に答える
2

あなたが何を望んでいるのか正確にはわかりませんが、ラベルを一方の端から他方の端まで均等に配置する場合(ただし、必ずしも正確である必要はありません)、次のようになります。

x = c(1:81)
bp <- barplot(x)
axis(side=1,at=bp[1+c(0,20,40,60,80)],labels=c(20,40,60,80,100))

私にとってのパズルは、なぜ「20」を 0 にラベル付けしたいのかということでした。しかし、これはそれを行う 1 つの方法です。

于 2011-11-27T16:18:40.363 に答える