2014-09-25 33 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