2017-11-16 23 views
0

私はどのようにしてfill "名前"を変更できますか:psavertを "個人貯蓄率"に、 "uempmed"を "週の中央値の失業期間"に変更します また、 7 y軸上でscale_x_discrete()を使用して変更することはできません。ggplot変更テーマ変更geom_area、

誰かが助けてくれますか?添付

はイメージであり、以下に下記の最初の例は、元のプロットのコードでそれを行う方法であるコード

library(ggplot2) 

library(lubridate) 

theme_set(theme_bw()) 

df <- economics[, c("date", "psavert", "uempmed")] 

df <- df[lubridate::year(df$date) %in% c(1967:1981), ] 

# labels and breaks for X axis text 
brks <- df$date[seq(1, length(df$date), 12)] 

lbls <- lubridate::year(brks) 

# plot 
ggplot(df, aes(x=date)) + 

    geom_area(aes(y=psavert+uempmed, fill="psavert")) + 

    geom_area(aes(y=uempmed, fill="uempmed")) + 

    labs(title="Area Chart of Returns Percentage", 
      subtitle="From Wide Data format", 
      caption="Source: Economics", 
      y="Returns %") + # title and caption 

    scale_x_date(labels = lbls, breaks = brks) + # change to monthly ticks and 

labels 

    scale_fill_manual(name="", 
        values = c("psavert"="#00ba38", "uempmed"="#f8766d")) + # 
line color 

    theme(panel.grid.minor = element_blank()) + # turn off minor grid 

    annotate("text", x=as.Date("1975-04-01"), y=25, label="Year with highest returns") #annotation layer 

enter image description here

答えて

1

です。 2番目の方法は、データを最初に「長い」形式に再構成し、値の名前を再コードする「ggplotのような」アプローチです。

library(tidyverse) 
library(lubridate) 

theme_set(theme_bw() + theme(panel.grid.minor=element_blank())) 

ggplot(df, aes(x=date)) + 
    geom_area(aes(y=psavert+uempmed, fill="Personal Saving Rate")) + 
    geom_area(aes(y=uempmed, fill="Unemployment Rate")) + 
    labs(title="Area Chart of Returns Percentage", 
     subtitle="From Wide Data format", 
     caption="Source: Economics", 
     y="Returns %") + # title and caption 
    scale_x_date(labels = lbls, breaks = brks) + # change to monthly ticks and labels 
    scale_fill_manual(name="", 
        values = c("Personal Saving Rate"="#00ba38", "Unemployment Rate"="#f8766d")) + # line color 
    scale_y_continuous(breaks=seq(0,30,10), labels=paste0(seq(0,30,10),"%")) + 
    annotate("text", x=as.Date("1975-04-01"), y=25, label="Year with highest returns") 

以下の代替もscale_x_datedate_breaksdate_labels引数を使用していますので、プロットを作成する前に休憩やラベルベクトルを作成する必要はありません。

ggplot(df %>% gather(key, value, -date) %>% 
     mutate(key=recode(key, "psavert"="Personal Saving Rate", "uempmed"="Unemployment Rate")), 
     aes(x=date, y=value, fill=key)) + 
    geom_area() + 
    labs(title="Area Chart of Returns Percentage", 
     subtitle="From Wide Data format", 
     caption="Source: Economics", 
     y="Returns %", 
     fill="") + 
    scale_x_date(date_breaks="1 year", date_labels="%Y") + 
    scale_fill_manual(name="", values = c("#00ba38", "#f8766d")) + 
    scale_y_continuous(breaks=seq(0,30,10), labels=paste0(seq(0,30,10),"%")) + 
    annotate("text", x=as.Date("1975-04-01"), 
      y=df %>% mutate(sum=psavert+uempmed) %>% pull(sum) %>% max + 1, 
      label="Year with highest returns")