2014-09-25 55 views
0

我想用繪製圖表GGPLOT2混合傳說組和固定x.axis值

所以,我有以下數據集:

實驗,方法,價值觀,平均

10,IEEE802.11P,1,19.80 
10,IEEE802.11P,5,21.91 
10,IEEE802.11P,10,23.66 
20,IEEE802.11P,1,16.03 
20,IEEE802.11P,5,19.64 
20,IEEE802.11P,10,27.81 
40,IEEE802.11P,1,16.43 
40,IEEE802.11P,5,27.65 
40,IEEE802.11P,10,42.61 
60,IEEE802.11P,1,17.06 
60,IEEE802.11P,5,36.15 
60,IEEE802.11P,10,49.87 
80,IEEE802.11P,1,18.78 
80,IEEE802.11P,5,41.70 
80,IEEE802.11P,10,53.54 
10,DTB-MAC,1,16.39 
10,DTB-MAC,5,17.39 
10,DTB-MAC,10,20.5 
20,DTB-MAC,1,12.34 
20,DTB-MAC,5,19.55 
20,DTB-MAC,10,23.4 
40,DTB-MAC,1,17.26 
40,DTB-MAC,5,25.24 
40,DTB-MAC,10,36.04 
60,DTB-MAC,1,15.97 
60,DTB-MAC,5,33.33 
60,DTB-MAC,10,42.15 
80,DTB-MAC,1,17.73 
80,DTB-MAC,5,35.05 
80,DTB-MAC,10,46.38 

這裏是繪製代碼:

library(grid); 
library(ggplot2); 
library(reshape2); 
pdf(file = '$filename.pdf', width=5, height=5); 

dat <- read.csv('bdr.csv'); 

ggplot(dat, aes(x = Experiment, y = Mean, colour = Method, 
      linetype = as.factor(Values), shape = as.factor(Values))) + 
    geom_line() + 
    geom_point()+ 
labs(x='$xlabel',y='$ylabel', fill='')+ 
scale_shape_discrete(name='Beacon Send Rate', breaks=c('1', '5', '10'), labels = c('1HZ', '5HZ', '10HZ')) + 
scale_linetype_discrete(name='Beacon Send Rate', breaks=c('1', '5', '10'), labels=c('1HZ', '5HZ', '10HZ'))+ 

scale_y_continuous(limits = c(0, 100), breaks = (seq(0,100,by = 20)))+ 
theme_bw()+ 
     theme( panel.grid.major = element_line(colour = 'grey'), 
panel.border = element_rect(colour = 'black'), 
axis.line = element_blank(), 
panel.background = element_blank(), legend.direction='horizontal', legend.position='top', legend.background = element_rect(colour = NA)); 

輸出是在這裏:

https://www.dropbox.com/s/wpmyrkatnizer4b/look2.pdf?dl=0

但是我有兩個問題:

1-數在x.axis(可變試驗)不正確顯示。它必須是10,20,40,60,80,但輸出是20,40,60,80。

2-有什麼方法混合傳說。例如在我的例子中,我有兩組傳奇(1hz,5hz,10hz)和(DTB-MAC,IEEE802.11P),並且只有一組6個項目?

回答

0

您可以通過映射到MethodValues的組合將圖例合併爲一個圖例。您可以使用interaction在數據集中創建一個新變量,或者如我在這裏所做的那樣,使用:與兩個因子變量進行交互。如果您映射到組合變量,則必須通過適當的scale_manual「手動」指定顏色,線型和形狀來完成一定量的工作。要正確執行此操作,您必須知道組合變量在圖例中顯示的順序。

對於x軸,您始終可以將x軸斷點設置爲scale_x_continuous

ggplot(dat, aes(x = Experiment, y = Mean, colour = Method:factor(Values), 
      linetype = Method:factor(Values), shape = Method:factor(Values))) + 
    geom_line() + 
    geom_point()+ 
    labs(x='$xlabel',y='$ylabel', fill='') + 
    scale_shape_manual(name = 'Method and\nBeacon Send Rate', 
        labels = c('DTB-MAC 1HZ', 'DTB_MAC 5HZ', 'DTB_MAC 10HZ', 'IEEE802.11P 1HZ', 'IEEE802.11P 5HZ', 'IEEE802.11P 10HZ'), 
        values = rep(c(15,16,17), 2)) + 
    scale_linetype_manual(name='Method and\nBeacon Send Rate', 
         labels = c('DTB-MAC 1HZ', 'DTB_MAC 5HZ', 'DTB_MAC 10HZ', 'IEEE802.11P 1HZ', 'IEEE802.11P 5HZ', 'IEEE802.11P 10HZ'), 
         values = rep(c("solid", "dashed", "dotted"), 2)) + 
    scale_color_manual(name='Method and\nBeacon Send Rate', 
        labels = c('DTB-MAC 1HZ', 'DTB_MAC 5HZ', 'DTB_MAC 10HZ', 'IEEE802.11P 1HZ', 'IEEE802.11P 5HZ', 'IEEE802.11P 10HZ'), 
        values = rep(c("red", "blue"), each = 3)) + 
    scale_y_continuous(limits = c(0, 100), breaks = (seq(0,100,by = 20))) + 
    scale_x_continuous(breaks = c(10, 20, 40, 60, 80)) + 
    theme_bw() + 
    theme(panel.grid.major = element_line(colour = 'grey'), 
     panel.border = element_rect(colour = 'black'), 
     axis.line = element_blank(), 
     panel.background = element_blank(), 
     legend.direction='horizontal', 
     legend.position='top', 
     legend.background = element_rect(colour = NA)) + 
    guides(shape = guide_legend(ncol = 2, keyheight = .5)) 
+0

非常感謝你正是我在找的東西。例如,在這個例子中,我們是否有很多傳說將它們分爲兩三行?請你們幫我分兩個例子。 – user3415921 2014-09-25 16:12:22

+0

@ user3415921 [This answer](http://stackoverflow.com/a/18400725/2461552)顯示瞭如何做你想要的圖例。我會將它添加到上面的圖中。 – aosmith 2014-09-25 16:25:02

+0

如何將兩個圖例鍵放在一行中,我將它們垂直放置? – user3415921 2014-09-25 17:13:20