Slučky stĺpce a pozemku na mieru rovnakého typu stĺpce na rovnakom pozemku pomocou ggplot2

0

Otázka

Vzhľadom dataframes df1 a df2 a dopĺňa takto:

df1:

df1 <- structure(list(date = structure(c(1L, 2L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 3L), .Label = c("2021/1/31", "2021/2/1", "2021/2/10", 
"2021/2/2", "2021/2/3", "2021/2/4", "2021/2/5", "2021/2/6", "2021/2/7", 
"2021/2/8", "2021/2/9"), class = "factor"), value1 = c(9.76, 
9.76, 9.88, 9.31, 9.71, 9.56, 9.27, 9.22, 9.21, 9.08, 8.78), 
    value2 = c(6.84, 6.88, 6.95, 6.65, 6.94, 6.85, 6.66, 6.66, 
    6.6, 6.5, 6.25), value3 = c(6.33, 6.21, 6.31, 6.2, 6.56, 
    6.36, 6.36, 6.25, 6.1, 6.02, 5.76), value4 = c(10.68, 10.91, 
    11, 10.49, 10.8, 10.5, 10.2, 9.85, 10.03, 9.8, 9.51), value5 = c(7.77, 
    7.84, 7.83, 7.44, 7.83, 7.77, 7.6, 7.46, 7.46, 7.39, 7.29
    )), class = "data.frame", row.names = c(NA, -11L))

df2:

df2 <- structure(list(type = structure(c(2L, 2L, 3L, 3L, 1L), .Label = c("pct_change", 
"price", "quantity"), class = "factor"), columns = structure(1:5, .Label = c("value1", 
"value2", "value3", "value4", "value5"), class = "factor")), class = "data.frame", row.names = c(NA, 
-5L))

Dej časové df1:

library(ggplot2)
library(data.table)
df1$date <- as.Date(df1$date)
df1.m <- melt(df1, id = "date")  # convert to long format
ggplot(data = df1.m,
       aes(x=date, y = value, colour=variable)) +
       geom_line(size = 1, alpha = 1) 
ggsave("df1.png")

Z:

enter image description here

Teraz dúfam, že do slučky všetky stĺpce, ale na základe df2,, čo znamená pre každého columns,, ak jeho type sú totožné, potom sa pozemok ich na rovnakom pozemku a nakoniec uložiť ich s názvom type.

Pre dataset df1budeme konečne vytvárať tri pozemky: price.png, quantity.png a pct_change.png.

Ako by som mohol dosiahnuť, že na základe vyššie uvedený kód? Úprimné poďakovanie v predstihu.

ggplot2 r
2021-11-24 04:40:27
1

Najlepšiu odpoveď

2

Myslím, že niečo podobné by to malo robiť, čo chcete. (Ale momentálne bežím do chybové s ggsave , ktorá by mala byť stanovená vzhľadom používam ggplot2 3.3.5?) Dúfajme, že to funguje pre druhých.

# add "type" variable to df1.m
df1.m2 = merge(df1.m, df2, by.x = "variable", by.y = "columns")

# for each "type", filter the data to that type, plot, and save    
for(my_type in unique(df1.m2$type)) {
  g <- ggplot(data = df1.m2[df1.m2$type == my_type,],
       aes(x=date, y = value, colour=variable)) +
  geom_line(size = 1, alpha = 1) 
  ggsave(paste0(my_type,".png"))
}
2021-11-24 05:16:52

Vďaka, ja používam ggplot2 3.3.5 ako dobre, som schopná uložiť pozemky bez akejkoľvek chyby.
ah bon

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................