0

次のようなデータフレームがあります。

df<-data.frame(Date=as.Date(c("06-08-10","06-09-10","06-10-10","06-11-10","06-13-10")),closed_this_year_cum_gv=c(3,5,6,7,NA),opened_this_year_cum_gv=c(2,5,6,8,10),closed_last_year_cum_gv=c(5,6,7,8,10),opened_last_year_cum_gv=c(5,6,8,10,NA))

ggplot2 を使用したプロットのためのこのフレームワークがあります。

ggplot(df, aes(x=Date))+
  geom_line(aes(y=closed_this_year_cum_gv, color="blue"),linetype="dashed")+
  geom_line(aes(y=opened_this_year_cum_gv, color="blue"))+
  geom_line(aes(y=closed_last_year_cum_gv, color="red"),linetype="dashed")+
  geom_line(aes(y=opened_last_year_cum_gv, color="red"))+
  xlab("Date")+
  ylab("Millions of Dollars")+
  ggtitle("Cummulative Sum of TGV for Opened and Closed Cases - 2013 vs. 2012")

サンプルデータでこれを試しましたが、何らかの理由で線が表示されません (実際のデータで表示されています)。NA をグラフ化しないようにしたいので、NA は 0 ではありません。

私の実際のデータでは、グラフになりますが、凡例のタイトルには「青」があり、その内容はラベルとして「青」と「赤」です。年ごとにラベルを付けて、オープン/クローズしてほしい。さまざまな方法を試しましたが、凡例を上書きするものはないようです。

凡例のタイトルとラベルを制御するにはどうすればよいですか?

編集:クラス「日付」に変更

4

2 に答える 2

0

ggplotワイドではなく、「ロング」フォーマットでデータが供給される方が一般的に満足しています。そうすれば、とりわけ、さまざまなaesステティックをデータセット内の変数にマッピングするのが簡単になります。

# some data massage before the plot
# reshape data from wide to long format 
library(reshape2)
df2 <- melt(df)

# convert variable 'Date' to class 'Date'
df2$Date <- as.Date(df2$Date, format = "%m-%d-%y")

# create two variables
# var1: opened vs closed
df2$var1 <- ifelse(grepl(x = df2$variable, pattern = "opened"), "Opened", "Closed")

# set factor levels so that 'opened' comes before 'closed'
df2$var1 <- factor(df2$var1, levels = c("Opened", "Closed"))

# var2: this vs last year 
df2$var2 <- ifelse(grepl(x = df2$variable, pattern = "this"), "This year", "Last year")


# plot
# use default colours, slightly pale 'red' and 'blue'
ggplot(df2, aes(x = Date, y = value, linetype = var1, colour = var2, group = interaction(var1, var2))) +
  geom_line()

# if you want to set colours to red and blue, add this
+ scale_colour_manual(values = c("red", "blue"))

次のコメントを更新します
。凡例が 1 つだけ必要な場合は、「変数」に依存することlinetypeをお勧めします。colour

# set factor levels so that 'opened' comes before 'closed', and 'last' before 'this'
df2$variable <- factor(df2$variable,
                   levels = c("opened_last_year_cum_gv",
                              "closed_last_year_cum_gv",
                              "opened_this_year_cum_gv",
                              "closed_this_year_cum_gv")
                       )


ggplot(df2, aes(x = Date, y = value, linetype = variable, colour = variable, group = variable)) +
  geom_line() +
  scale_colour_manual(values = rep(c("red", "blue"), each = 2),
                      name = "",
                      labels =  c("Opened last year",
                                  "Closed last year",
                                  "Opened this year",
                                  "Closed this year")) +
  scale_linetype_manual(values = rep(c("solid", "dashed"), 2),
                        name = "",
                        labels =  c("Opened last year",
                                    "Closed last year",
                                    "Opened this year",
                                    "Closed this year"))
于 2013-11-06T17:05:54.297 に答える
0

で適切なマッピングを指定する必要がありますaes()。これを試して:

ggplot(df, aes(x=Date)) +
  geom_line(aes(y=closed_this_year_cum_gv, color="this", linetype="closed")) +
  geom_line(aes(y=opened_this_year_cum_gv, color="this", linetype="opened")) +
  geom_line(aes(y=closed_last_year_cum_gv, color="last", linetype="closed")) +
  geom_line(aes(y=opened_last_year_cum_gv, color="last", linetype="opened")) +
  xlab("Date") +
  ylab("Millions of Dollars") +
  ggtitle("Cummulative Sum of TGV for Opened and Closed Cases - 2013 vs. 2012") +
  scale_colour_manual(name="year", values=c("this"="blue", "last"="red")) +
  scale_linetype_manual(name="type", values=c(2, 1))
于 2013-11-06T15:37:12.623 に答える