2

2 つのグループを持つ棒グラフがあります。ここで、y 軸 = 稼いだドル & x 軸の幅 = 販売されたユニット数です。以下のサンプルデータ:

test<- structure(list(Person = c("Bob", "Bob", "Bob", "Bob", "Bob", 
"Jim", "Jim", "Jim", "Jim", "Jim"), Car = c("Wombat", "Beetle", 
"Impala", "Carrera", "Sienna", "Wombat", "Beetle", "Impala", 
"Carrera", "Sienna"), tot = c(75090, 229994, 1229347, 247052, 
1148873, 41114, 2430, 430423, 629812, 30442), freq = c(5L, 620L, 
1324L, 219L, 550L, 36L, 1L, 213L, 195L, 2L)), .Names = c("Person", 
"Car", "tot", "freq"), row.names = c(NA, 10L), class = "data.frame")

# Print bar chart.
ggplot()+
geom_bar(data=test,aes(x=reorder(Car,tot,function(x) -sum(x)),
                       y=as.numeric(tot)/1000,width=freq/1000,fill=Person),
       stat='identity',position='identity')

このチャートに対して次の 2 つのことを行いたいのですが、障害があります。

A) 車のカテゴリごとに、人物を上下に配置するのではなく、並べて配置します。ggplot はposition = 'dodge'、さまざまな長さの幅には対応できないと言っています。

B) 車カテゴリ間の間隔は、幅が最も広いバーに基づいて設定されているようです。その間隔を次のように変化させることは可能width * .05ですか? たとえば、SiennaCarrera、 &の間のスペースを狭くしたいBeetle

4

1 に答える 1

1

これらのチャートを分割することをお勧めします。まず、すべての問題は自然に解決されます。次に、異なる変数 (この例では販売台数と車のカテゴリ) を同じ軸に混在させないため、悪い習慣を回避できます。

物事を自分のやり方でプロットすることを主張する場合、まあ、私が考えることができる簡単な方法はありません.ggplotはその「型にはまらない」使用法を思いとどまらせます。これが最も有名な例です: 2 つの y 軸、左側に 1 つの y 軸、右側に別の y 軸を持つプロット

library(gridExtra)
p1 <- ggplot()+
    geom_bar(data=test,aes(x=reorder(Car,tot,function(x) -sum(x)),
                           y=tot/1000,fill=Person),
             stat='identity',position='dodge')
p2 <- ggplot()+
    geom_bar(data=test,aes(x=reorder(Car,tot,function(x) -sum(x)),
                           y=freq/1000,fill=Person),
             stat='identity',position='dodge')
grid.arrange(p1, p2)

ここに画像の説明を入力

于 2013-12-25T13:47:46.267 に答える