2014-12-02 26 views
0

我有很多的那种情节:映射到yeardays轴建月?

ggplot(aes(x=yearday, y=numeric.result)) + ... 

其中“yearday”用的是yday()功能从lubridate获得。

我现在想要x轴标签显示月份而不是yearday,而且我似乎无法找到一种简单的方法来完成此操作。它肯定涉及scale_x_continous,休息时间是#日/月,标签是缩写。几个月,但我似乎无法得到正确的语法。

在此先感谢!

dput(mydat)

structure(list(ydays = c(354, 354, 20, 53, 80, 94, 138, 166, 
207, 236, 285, 332, 353, 353, 45, 64, 100, 136, 136, 176, 211, 
211, 240, 240, 269, 288, 288, 323, 347, 24, 49, 77, 100, 140, 
176, 211, 238, 267, 289, 324, 345, 22, 41, 64, 112, 140, 155, 
203, 218, 252, 280, 322, 343, 26, 42, 76, 119, 146, 168, 209, 
229, 259, 293, 334, 342, 19, 38, 66, 109, 138, 164, 192, 229, 
255, 278, 305, 339, 17, 37, 67, 108, 122, 170, 191, 228, 261, 
296, 318, 347, 17, 50, 78, 106, 134, 156, 204, 232, 247, 288, 
317, 345, 14, 14, 51, 51, 84, 107, 141, 168, 203, 231, 282, 316, 
345, 345, 345, 5, 51, 69, 69, 103, 133, 167, 195, 217, 258, 285, 
348, 19, 40, 75, 97, 145, 159, 194, 221, 251, 280, 312, 340, 
18, 39, 67, 108, 143, 165, 187, 227, 256, 283, 313, 339, 339, 
10, 44, 72, 101, 135, 156, 198, 226, 254, 276, 312, 338, 36, 
91, 133, 154, 218, 42, 64, 132, 162, 188, 252, 281, 307), result = c(0.22, 
1.688, 0.606, 0.794, 1.211, 1.013, 1.272, 1.142, 0.812, 0.557, 
0.421, 0.91, 1.171, 0.522, 1.002, 1.028, 0.917, 0.634, 1.494, 
0.972, 1.194, 0.609, 1.466, 0.359, 0.418, 0.278, 1.291, 0.754, 
0.798, 0.404, 0.495, 0.621, 0.859, 0.625, 0.851, 0.226, 0.147, 
0.264, 0.306, 0.189, 0.247, 0.646, 0.893, 0.519, 1.149, 0.876, 
0.236, 0.943, 0.846, 0.724, 0.417, 0.626, 0.667, 0.461, 0.794, 
0.558, 0.3, 0.61, 0.542, 0.35, 0.569, 0.172, 0.082, 0.118, 0.278, 
0.468, 0.403, 0.455, 0.397, 0.357, 0.357, 0.245, 0.208, 0.312, 
0.12, 0.168, 0.099, 0.383, 0.638, 0.457, 0.637, 0.723, 0.553, 
0.591, 0.246, 0.488, 0.169, 0.505, 0.248, 0.577, 0.436, 0.496, 
0.519, 0.47, 0.439, 0.162, 0.084, 0.06, 0.209, 0.104, 0.116, 
1.31, 0.306, 1.355, 0.122, 0.391, 0.467, 0.7, 0.538, 0.407, 0.39, 
0.124, 0.152, 1.185, 0.154, 1.26, 0.297, 0.778, 1.491, 0.378, 
0.27, 0.629, 0.574, 0.496, 0.432, 0.374, 0.116, 0.28, 0.409, 
0.624, 0.501, 0.973, 0.152, 0.472, 0.674, 0.2, 0.234, 0.2, 0.02, 
0.362, 0.3, 0.44, 1.22, 0.415, 0.782, 0.66, 0.567, 0.418, 0.333, 
0.26, 0.166, 0.414, 0.414, 0.134, 0.509, 0.43, 0.218, 0.437, 
0.304, 0.344, 0.258, 0.17, 0.175, 0.487, 0.506, 0.293, 0.435, 
0.443, 0.352, 0.499, 0.456, 0.577, 0.479, 0.241, 0.552, 0.262, 
0.199, 0.131)), .Names = c("ydays", "result"), row.names = c(NA, 
-178L), class = "data.frame") 

CODE

ggplot(mydat,aes(x = ydays, y = result)) + geom_point() + geom_line() + theme_bw() 

所以,在这里你可以看到的数据是正确的,通过365(Dec31)日标绘在第一天(Jan1),但我只想就像在X轴上显示的月份,以便在阅读地块时的清晰度。请注意,没有与x轴关联的年份。

希望这有助于解释我的情况! 最好的!

+0

你能分享你的ggplot的实际代码以及样本数据吗?这样,有人可以帮助你。 :) – jazzurro 2014-12-02 14:18:19

+0

我当然可以花时间做到这一点,我只是认为这是一个足够有针对性的问题(几个月映射到ydays),真的有人可以回答。事实上,我有点惊讶,这之前没有出现过(我看起来很难)。我会做一些事情发布。 – isotopesforbreakfast 2014-12-02 14:25:04

+0

那太棒了! – jazzurro 2014-12-02 14:32:45

回答

3

加入scale_x_continuous怎么样?可能有更好的方法来做到这一点,但以下工作:

scale_x_continuous(breaks = cumsum(c(1, 31, 30, 28, 30, 31, 30, 31, 31, 30, 31, 30)), 
        label = c('Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'June', 
          'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec')) 
+0

我喜欢这个主意。 – jazzurro 2014-12-02 15:02:49

+0

感谢user1707525!你的代码可以工作,但是Shadow的scale_x_continuous解决方案非常尖锐,没有问题。影子,你可能是德国人吗?无论如何,这是我尝试失踪的cumsum(),非常感谢。 – isotopesforbreakfast 2014-12-02 15:04:37

0

这样(所有月份有30天,例如简洁)?

data <- data.frame(yday=1:360, values=rnorm(360)) 

months <- c("Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec") 

labels <- rep("", times=360) 
labels[1 + (0:11 * 30)] <- months 

ggplot(data, aes(x=yday, y=values)) + 
    scale_x_continuous(breaks=data$yday, labels=labels) + 
    geom_point() + geom_line() + theme_bw()