2017-08-24 4 views
0

je l'ensemble de données suivantes:résultat bizarre avec facet_wrap()

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") 

Avec le code ci-dessous je tracer une simple combinaison de graphique points/ligne.

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) 

L'intrigue semble appropriée, si je veux différencier les séries de temps par appel facet_wrap.

C'est à ce moment que mon problème se produit. Si j'ajoute facet_wrap(~ year, ncol=3), ce qui fait que la série temporelle est fondamentalement la série temporelle plutôt que d'avoir un flux continu d'un panneau à l'autre, la ligne est déformée.

Pourquoi?

Répondre

2

Vos facettes ont le même axe x avec toutes les valeurs x. Ajoutez l'argument scales = "free_x" pour avoir une plage d'axes x différente pour chaque facette.

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

Voici la solution pour vous:

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()) 

Votre colonne new_df n'a pas été correctement ordonné après avoir utilisé facet_wrap() donc j'ai d'abord commandé correctement et ensuite utilisé dans ggplot(). De plus en scales = "free_x"facet_wrap était nécessaire d'utiliser, de ne pas avoir toutes les valeurs de l'axe x dans chaque facette (juste flux)

enter image description here