facet_wrap()

时间:2017-08-24 08:06:23

标签: r ggplot2 plotly

我有以下数据集:

active <- structure(list(new_df = structure(c(1L, 12L, 23L, 26L, 27L, 28L, 
29L, 30L, 31L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 24L, 25L), .Label = c("1", 
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", 
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "3", 
"30", "31", "4", "5", "6", "7", "8", "9"), class = "factor"), 
    Date = structure(c(1422662400, 1425081600, 1427760000, 1430352000, 
    1433030400, 1435622400, 1438300800, 1440979200, 1443571200, 
    1446249600, 1448841600, 1451520000, 1454198400, 1456617600, 
    1459382400, 1461974400, 1464652800, 1467244800, 1469923200, 
    1472601600, 1475193600, 1477872000, 1480464000, 1483142400, 
    1485820800, 1488240000, 1490918400, 1493510400, 1496188800, 
    1498780800, 1501459200), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    value = c(65139, 66615, 66669, 67081, 67277, 67366, 67831, 
    65226, 64967, 64999, 65182, 65695, 68071, 68689, 68860, 69581, 
    69566, 68585, 67644, 67846, 67799, 67999, 68125, 68934, 68668, 
    68671, 68583, 68608, 68728, 69417, 69814), month = c(1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 
    4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 
    6L, 7L), months = c("јануари", "февруари", "март", "април", 
    "мај", "јуни", "јули", "август", "септември", "октомври", 
    "ноември", "декември", "јануари", "февруари", "март", "април", 
    "мај", "јуни", "јули", "август", "септември", "октомври", 
    "ноември", "декември", "јануари", "февруари", "март", "април", 
    "мај", "јуни", "јули"), year = c(2015L, 2015L, 2015L, 2015L, 
    2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
    2016L, 2016L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L
    ), year2 = c("15", "15", "15", "15", "15", "15", "15", "15", 
    "15", "15", "15", "15", "16", "16", "16", "16", "16", "16", 
    "16", "16", "16", "16", "16", "16", "17", "17", "17", "17", 
    "17", "17", "17"), year_month = structure(1:31, .Label = c("1/15", 
    "2/15", "3/15", "4/15", "5/15", "6/15", "7/15", "8/15", "9/15", 
    "10/15", "11/15", "12/15", "1/16", "2/16", "3/16", "4/16", 
    "5/16", "6/16", "7/16", "8/16", "9/16", "10/16", "11/16", 
    "12/16", "1/17", "2/17", "3/17", "4/17", "5/17", "6/17", 
    "7/17"), class = "factor"), Period = c("јануари/2015", "февруари/2015", 
    "март/2015", "април/2015", "мај/2015", "јуни/2015", "јули/2015", 
    "август/2015", "септември/2015", "октомври/2015", "ноември/2015", 
    "декември/2015", "јануари/2016", "февруари/2016", "март/2016", 
    "април/2016", "мај/2016", "јуни/2016", "јули/2016", "август/2016", 
    "септември/2016", "октомври/2016", "ноември/2016", "декември/2016", 
    "јануари/2017", "февруари/2017", "март/2017", "април/2017", 
    "мај/2017", "јуни/2017", "јули/2017")), .Names = c("new_df", 
"Date", "value", "month", "months", "year", "year2", "year_month", 
"Period"), row.names = c(NA, -31L), class = "data.frame")

使用下面的代码,我正在绘制点/线图的简单组合。

library(ggplot2)
p <- ggplot(active)  +
  geom_point(aes(as.factor(new_df), value, text = Period), size = 2, color="green") +
  geom_line(aes(as.factor(new_df), value, group = 1, alpha = 0.5), color = "deepskyblue4", group = 1) +
  theme_minimal()+
  xlab("") + 
  ylab("") +
  theme(axis.text.x=element_blank()) 

library(plotly)
ggplotly(p)

如果我想通过facet_wrap调用区分时间序列,那么情节看起来是恰当的。

那是我的问题发生的时候。如果我添加facet_wrap( ~ year, ncol=3),那么基本上按年份面对时间序列,而不是从一个面板到下一个面板的连续流程,线条会变形。

有什么线索?

2 个答案:

答案 0 :(得分:2)

您的facet具有相同的x轴,包含所有x值范围。添加参数scales = "free_x"以使每个方面具有不同的x轴范围。

+ facet_wrap( ~ year, ncol=3, scales = "free_x")

答案 1 :(得分:1)

以下是您的解决方案:

library(gtools)
data$new_df <- with(data, factor(new_df, levels = gtools::mixedsort(unique(as.character(new_df)))))

ggplot(data)  +
  geom_point(aes(new_df, value, text = Period), size = 2, color="green") +
  geom_line(aes(new_df, value, group = 1, alpha = 0.5), color = "deepskyblue4", group = 1) +
  theme_minimal()+  facet_wrap( ~ year, ncol=3, scales = "free_x") +
  xlab("") + 
  ylab("") + theme(axis.text.x=element_blank()) 
使用facet_wrap()后,

您的new_df列未正确排序,因此我首先正确订购并随后在ggplot()中使用。另外scales = "free_x"facet_wrap是必须使用的,因为每个方面都没有x轴值(只是流量)

enter image description here