2017-04-19 126 views
1

我正在尝试创建发布图形,并且在我的字段中绘图惯例对此信息(绘制听力图)非标准。在离散x轴上指定次要网格线/一些虚线网格线

某些样本数据:

subsetAudio <- 
structure(list(Subject = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L), Frequency = c(250, 250, 250, 500, 500, 500, 750, 
750, 750, 1000, 1000, 1000, 1500, 1500, 1500, 2000, 2000, 2000, 
3000, 3000, 3000, 4000, 4000, 4000, 6000, 6000, 6000, 8000, 8000, 
8000, 250, 250, 250, 500, 500, 500, 750, 750, 750, 1000, 1000, 
1000, 1500, 1500, 1500, 2000, 2000, 2000, 3000, 3000, 3000, 4000, 
4000, 4000, 6000, 6000, 6000, 8000, 8000, 8000), Ear = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Left", 
"Right"), class = "factor"), dBHL = c(10L, 30L, 20L, 10L, 45L, 
20L, 25L, 50L, 20L, 30L, 45L, 25L, 45L, 45L, 60L, 50L, 45L, 60L, 
55L, 45L, 60L, 60L, 50L, 60L, 65L, 70L, 65L, 65L, 75L, 70L, 30L, 
35L, 25L, 10L, 45L, 25L, 30L, 50L, 25L, 30L, 50L, 30L, 40L, 45L, 
45L, 50L, 55L, 60L, 60L, 55L, 60L, 60L, 60L, 65L, 65L, 75L, 60L, 
65L, 85L, 65L)), .Names = c("Subject", "Frequency", "Ear", "dBHL" 
), row.names = c(1L, 2L, 3L, 11L, 12L, 13L, 21L, 22L, 23L, 31L, 
32L, 33L, 41L, 42L, 43L, 51L, 52L, 53L, 61L, 62L, 63L, 71L, 72L, 
73L, 81L, 82L, 83L, 91L, 92L, 93L, 101L, 102L, 103L, 111L, 112L, 
113L, 121L, 122L, 123L, 131L, 132L, 133L, 141L, 142L, 143L, 151L, 
152L, 153L, 161L, 162L, 163L, 171L, 172L, 173L, 181L, 182L, 183L, 
191L, 192L, 193L), class = "data.frame") 

使这个困难的是,“频率”必须输入作为一个因素,在一个分立的X标尺,因为这些值的间距的。

用标记的所有离散点:

ggplot(subsetAudio, aes(x = factor(Frequency), y = dBHL, group = Subject)) + 
    theme_bw() + 
    facet_grid(~ Ear) + 
    geom_line(linetype = "dashed",size=0.8) + 
    scale_x_discrete(name = "Frequency (kHz)",labels=c("0.25", "0.5", "0.75", "1", "1.5", "2", "3", "4", "6", "8"), position = "top") + 
    scale_y_reverse(name = "Level (dB HL)", lim=c(120,-10),minor_breaks = seq(0 ,120, 5), breaks = seq(-10, 120, 10)) + 
    theme(panel.grid.major = element_line(colour = "black",size=0.1)) + 
    theme(panel.grid.minor = element_line(colour = "black",linetype="dashed",size=0.1)) + 
    theme(strip.text.x = element_blank()) + 
    geom_text(data=data.frame(x = 1.5, y = -6.25, label=c("a)", "b)"), 
          Ear=c("Left","Right")), aes(x,y,label=label), size=8,inherit.aes=FALSE) 

这将产生以下数字: enter image description here

这里的问题是,我需要在x尺度网格线为0.75,1.5,3,和6被打破。

我尝试了绘制 “主要” 网格线(1.25,5,1,2,4,8):

ggplot(subsetAudio, aes(x = factor(Frequency), y = dBHL, group = Subject)) + 
    theme_bw() + 
    facet_grid(~ Ear) + 
    geom_line(linetype = "dashed",size=0.8) + 
    scale_x_discrete(name = "Frequency (kHz)",breaks=c("250","500","1000","2000","4000","8000"),labels=c("0.25", "0.5", "1", "2", "4", "8"), position = "top") + 
    scale_y_reverse(name = "Level (dB HL)", lim=c(120,-10),minor_breaks = seq(0 ,120, 5), breaks = seq(-10, 120, 10)) + 
    theme(panel.grid.major = element_line(colour = "black",size=0.1)) + 
    theme(panel.grid.minor = element_line(colour = "black",linetype="dashed",size=0.1)) + 
    theme(strip.text.x = element_blank()) + 
    geom_text(data=data.frame(x = 1.5, y = -6.25, label=c("a)", "b)"), 
          Ear=c("Left","Right")), aes(x,y,label=label), size=8,inherit.aes=FALSE) 

哪个给出了这样的情节: enter image description here

但是,我不知道如何在缺少点(0.75,1.5,3和6)添加虚线

任何有关如何解决此问题的建议?

最后,我需要在x轴上实线和虚线的组合:

0.25 - solid 
0.5 - solid 
0.75 - dashed 
1 - solid 
1.5 - dashed 
2 - solid 
3 - dashed 
4 - solid 
6 - dashed 
8 - solid 
+0

您发布了所有数据吗?我从你发布的内容中获得了不同的情节。 –

+0

对错误的诠释感到惋惜 - 'scale_x_discrete'没有一点小缺点,所以你可能需要做一些冒险的事。 –

+0

@MikeH。更新后的完整数据 缺乏轻微的休息争论是我的障碍。我希望有人可以建议一个hacky的解决方法:) – JLC

回答

0

我提出通过转动“频率”变量成连续可变一些哈克进展:

subsetAudio$Frequency <- as.numeric(mapvalues(Avg_Audio$Frequency, c("250","500","750","1000","1500","2000","3000","4000","6000","8000"), 
            c("1","2","2.5","3","3.5","4","4.5","5","5.5","6"))) 

然后用主要和次要网格线玩:

ggplot(Audios, aes(x = Frequency, y = dBHL, group = Subject)) + 
    theme_bw() + 
    facet_grid(~ Ear) + 
    geom_line(linetype = "dashed",size=0.8) + 
    geom_line(data = Avg_Audio, aes(Frequency,dBHL, group = Subject), size = 1.5) + 
    scale_x_continuous(name = "Frequency (kHz)",breaks=c(1,2,3,4,5,6),labels=c("0.25", "0.5", "1", "2", "4", "8"),minor_breaks=c(2.5,3.5,4.5,5.5), position = "top") + 
    scale_y_reverse(name = "Level (dB HL)", lim=c(120,-20),minor_breaks = seq(0 ,120, 10), breaks = seq(-20, 120, 20)) + 
    theme(panel.grid.major = element_line(colour = "black",size=0.1), panel.grid.minor.x = element_line(colour="grey", linetype="dashed"), 
     strip.text.x = element_blank()) + 
    geom_text(data=data.frame(x = 1.5, y = -10, label=c("a)", "b)"), 
      Ear=c("Left","Right")), 
      aes(x,y,label=label), size=8,inherit.aes=FALSE) 

这将产生以下图ure:enter image description here

这是非常接近....但我找不到方法来添加刻度或标签到次要(虚线)网格线(0.75,1.5,3,6)。

有什么建议吗?