2017-06-06 42 views
0

与表像下面ggplot - 订货x轴标签,通过多列

df <- read.table(textConnection(" 
tier make model sales 
entry Toyota Yeti 10000 
entry Honda Jazz 8000 
entry Nissan Sunny 5000 
entry Honda Amaze 4000 
entry Toyota Model10 3500 
entry Nissan Beat 2000 
Mid Honda Civic 4000 
Mid Toyota Corolla 3000 
Mid Honda Accord 2500 
Mid Nissan Xtrail 2200 
Mid Toyota Camry 1800 
Mid Nissan Moon 800 
"), header = TRUE) 

> df 
    tier make model sales 
1 entry Toyota Yeti 10000 
2 entry Honda Jazz 8000 
3 entry Nissan Sunny 5000 
4 entry Honda Amaze 4000 
5 entry Toyota Model10 3500 
6 entry Nissan Beat 2000 
7 Mid Honda Civic 4000 
8 Mid Toyota Corolla 3000 
9 Mid Honda Accord 2500 
10 Mid Nissan Xtrail 2200 
11 Mid Toyota Camry 1800 
12 Mid Nissan Moon 800 

当我绘制使用ggplot通过模型的销售为以下我得到的情节在画面

ggplot(df, aes(x=model, y=sales)) + 
    geom_point() 

enter image description here

正如所预期的,x轴标签model在升序按照它们的电平 - Accord至上和Yeti最后。

> str(df) 
'data.frame': 12 obs. of 4 variables: 
$ tier : Factor w/ 2 levels "entry","Mid": 1 1 1 1 1 1 2 2 2 2 ... 
$ make : Factor w/ 3 levels "Honda","Nissan",..: 3 1 2 1 3 2 1 3 1 2 ... 
$ model: Factor w/ 12 levels "Accord","Amaze",..: 12 7 10 2 8 3 5 6 1 11 ... 
$ sales: int 10000 8000 5000 4000 3500 2000 4000 3000 2500 2200 ... 
> 

不过,我需要顺序不同的model情节 - 当表由一线订购了获得,制造和销售(下降)。我可以在下面的代码中获得该表的订购顺序 - 如何在图中获得model的x轴标签的相同顺序?

> df[with(df, order(tier, make, -sales)),] 
    tier make model sales 
2 entry Honda Jazz 8000 
4 entry Honda Amaze 4000 
3 entry Nissan Sunny 5000 
6 entry Nissan Beat 2000 
1 entry Toyota Yeti 10000 
5 entry Toyota Model10 3500 
7 Mid Honda Civic 4000 
9 Mid Honda Accord 2500 
10 Mid Nissan Xtrail 2200 
12 Mid Nissan Moon 800 
8 Mid Toyota Corolla 3000 
11 Mid Toyota Camry 1800 
> 

回答

2

您可以更改模型变量的因子水平的顺序,然后绘图。就像这样:

df <- df[with(df, order(tier, make, -sales)),] 
df$model <- factor(df$model, levels = unique(df$model)) 
ggplot(df, aes(x=model, y=sales)) + 
    geom_point() 

第一行改变行的顺序。第二行是实际的重新排序。 unique(df$model)是变量的当前顺序,并将其用作可按此顺序绘制数据的因子级别。