2017-02-15 15 views
2

私は十分にはっきりしていない場合、ここで最初にここで質問してください。棒グラフの棒グラフをggplot2で並べ替える

これまで、データフレームの一部のフィールドでバーをソートする方法を説明する、同様の質問に対する多くの回答がありました。 (。明らかに、データフレームのフィールドではありません):

library(ggplot2) 

Name <- c('Juan','Michael','Andrea','Charles','Jonás','Juan','Donata','Flavia') 
City <- c('Madrid','New York','Madrid','Liverpool','Madrid','Buenos Aires','Rome','Liverpool') 
City.Id <- c(1,2,1,3,1,4,5,3) 
df = data.frame(Name,City,City.Id) 

a <- ggplot(df,aes(x = City, text=paste("City.Id=",City.Id))) + 
geom_bar() 

ggplotly(a) 
が、私はgeom_barのデフォルトSTAT「カウント」することによって、それらをソートする方法を見つけることができませんしてきた 例えば、私はこのコードを実行します

そして、高さ(=カウント)で並べられた結果のバーを視覚化したいと思います。最後のプロットに表示するには "City.Id"情報を保持する必要があります。これはどうすればできますか?

df$City <- reorder(df$City,df$City.Id,length) 

をして、問題のコードをプロットします。

答えて

4

、私はtidyverseが提供できる他に何に探してお勧めしたいです。すなわち、要因を扱うためのパッケージforcats

forcatsは、ファクタのレベルを周波数の順に再設定(設定)する素敵なファンクションfct_infreq()を持っています。データがまだ因子ではない文字ベクトル(例えば、Cityがあなたのデータにある)であれば、それはまずそれを要素にして、レベルを周波数順に設定します。

このコードを試してみてください。

# Load packages 
library(ggplot2) 
library(forcats) 

# Create data 
Name <- c('Juan','Michael','Andrea','Charles','Jonás','Juan','Donata','Flavia') 
City <- c('Madrid','New York','Madrid','Liverpool','Madrid','Buenos Aires','Rome','Liverpool') 
City.Id <- c(1,2,1,3,1,4,5,3) 
df = data.frame(Name,City,City.Id) 

# Create plot 
a <- ggplot(df, aes(x = fct_infreq(City), text=paste("City.Id=",City.Id))) + 
    geom_bar() 

a 
2

一つreorderを使用することができます。すでにggplot2を使用していることを考えると

enter image description here

+3

あなたがggplotする呼び出し内で、その場でこれを行うことができます: 'ggplot(DF、AES(X =リオーダー(市、City.Id、長さ)))+ geom_bar() ' – eipi10

+0

@thisisrg私はその行を使用しようとしましたが、dfは同じままです – Javi

+0

私は図を追加しました。あなたは「長さ」を忘れましたか? – thisisrg

関連する問題