ggplot 按组过滤 ()

ggplot by group with filter()

我有以下格式的大数据集:

   structure(list(LOCATION = c("CAN", "CAN", "CAN", "CAN", "CAN", 
"CAN", "CAN", "CAN", "CAN", "CAN"), Country = c("Canada", "Canada", 
"Canada", "Canada", "Canada", "Canada", "Canada", "Canada", "Canada", 
"Canada"), SUBJECT = c("ULABUL99", "ULABUL99", "ULABUL99", "ULABUL99", 
"ULABUL99", "ULABUL99", "ULABUL99", "ULABUL99", "ULABUL99", "ULABUL99"
), Subject = c("Unit Labour Cost", "Unit Labour Cost", "Unit Labour Cost", 
"Unit Labour Cost", "Unit Labour Cost", "Unit Labour Cost", "Unit Labour Cost", 
"Unit Labour Cost", "Unit Labour Cost", "Unit Labour Cost"), 
    SECTOR = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Sector = c("Total Economy", 
    "Total Economy", "Total Economy", "Total Economy", "Total Economy", 
    "Total Economy", "Total Economy", "Total Economy", "Total Economy", 
    "Total Economy"), MEASURE = c("ST", "ST", "ST", "ST", "ST", 
    "ST", "ST", "ST", "ST", "ST"), Measure = c("Level, ratio or national currency", 
    "Level, ratio or national currency", "Level, ratio or national currency", 
    "Level, ratio or national currency", "Level, ratio or national currency", 
    "Level, ratio or national currency", "Level, ratio or national currency", 
    "Level, ratio or national currency", "Level, ratio or national currency", 
    "Level, ratio or national currency"), FREQUENCY = c("A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A"), Frequency = c("Annual", 
    "Annual", "Annual", "Annual", "Annual", "Annual", "Annual", 
    "Annual", "Annual", "Annual"), TIME = 1970:1979, Time = 1970:1979, 
    Value = c(0.1304592, 0.1357066, 0.1430287, 0.1521136, 0.1752398, 
    0.2018611, 0.2193767, 0.2347496, 0.2470616, 0.2663881), Flag.Codes = c("E", 
    "E", "E", "E", "E", "E", "E", "E", "E", "E"), Flags = c("Estimated value", 
    "Estimated value", "Estimated value", "Estimated value", 
    "Estimated value", "Estimated value", "Estimated value", 
    "Estimated value", "Estimated value", "Estimated value")), row.names = c(NA, 
10L), class = "data.frame")

我想绘制如下时间图(对于特定国家特定主题的每个部门组,在本例中为德国的劳动收入份额)

我试着编码如下:

library(ggplot2)
library(tidyr)

df <- read.csv("/Users/ulc.csv", header = TRUE)
fsector = factor(df$SECTOR)
df %>%
  filter(df$MEASURE =="ST",
df$SUBJECT == "ULAIRU99",
         df$LOCATION == "DEU") %>% 
ggplot(aes(x = df$year, y = df$value, color =  fsector, linetype = fsector)) +
scale_color_manual(labels=c("Sec 1","Sec 2", "Sec 3", "Sec 4", "Sec 5", "Sec 6", "Sec 7", "Sec 8"), values = 1:8) + 
scale_linetype_manual(labels=c("Sec 1","Sec 2", "Sec 3", "Sec 4", "Sec 5", "Sec 6", "Sec 7", "Sec 8"), values = 1:8) + 
theme(legend.position = c(0.8, 0.3), legend.title = element_blank()) +
ylab("LIS of Germany by sector") + xlab("year") 

但是结果没有显示任何图,我的代码中似乎缺少很多元素。也许我应该为每个部门添加 geom_line() ?但似乎有更简单的方法。任何帮助将不胜感激。

你可以试试下面的代码-

library(dplyr)
library(ggplot2)

df %>%
  filter(MEASURE =="ST",SUBJECT == "ULAIRU99",LOCATION == "DEU") %>%
  mutate(SECTOR = factor(SECTOR)) %>%
  ggplot(aes(x = TIME, y = Value, color =  SECTOR, linetype = SECTOR)) +
  geom_line() + 
  scale_color_manual(labels=c("Sec 1","Sec 2", "Sec 3", "Sec 4", "Sec 5", "Sec 6", "Sec 7", "Sec 8"), values = 1:8) + 
  scale_linetype_manual(labels=c("Sec 1","Sec 2", "Sec 3", "Sec 4", "Sec 5", "Sec 6", "Sec 7", "Sec 8"), values = 1:8) + 
  theme(legend.position = c(0.8, 0.3), legend.title = element_blank()) +
  ylab("LIS of Germany by sector") + xlab("year")