5

economics{ggplot2}データセットから 2 つの時系列の次の簡単なプロットを取得します。

require(dplyr)
require(ggplot2)
require(lubridate)
require(tidyr)

economics %>%
  gather(indicator, percentage, c(4:5), -c(1:3, 6)) %>%
  mutate(Y2K = year(date) >= 2000) %>%
  group_by(indicator, Y2K) %>%
  ggplot(aes(date, percentage, group = indicator, colour = indicator)) + geom_line(size=1)

ここに画像の説明を入力

21 世紀のすべての点、つまり が に等しい観測値について、linetypeを「実線」から「破線」 (および場合によっては線も)に変更したいと考えています。sizeY2KTRUE

私はやったgroup_by(indicator, Y2K)が、コマンド内では複数のレベルでggplot使用できないように見えるので、今のところ線のプロパティが異なるだけです。group =indicator

質問: このセグメント化された線の外観を実現するにはどうすればよいですか?

更新:私の好みの解決策は、@sahoangによるものからわずかに微調整することです:

economics %>%
        gather(indicator, percentage, c(4:5), -c(1:3, 6)) %>%
        ggplot(aes(date, percentage, colour = indicator)) + 
        geom_line(size=1, aes(linetype = year(date) >= 2000)) +
        scale_linetype(guide = F)

これにより、@Roland のgroup_byコメントが削除され、filter手順により、時系列が Y2K ポイントで接続されることが保証されます (データが年ベースの場合、そうでない場合は視覚的な不連続性が生じる可能性があります)。

4

2 に答える 2

5

@Rolandの提案よりもさらに簡単です:

economics %>%
    gather(indicator, percentage, c(4:5), -c(1:3, 6)) %>%
    mutate(Y2K = year(date) >= 2000) %>%
    group_by(indicator, Y2K) -> econ

ggplot(econ, aes(date, percentage, group = indicator, colour = indicator)) + 
  geom_line(data = filter(econ, !Y2K), size=1, linetype = "solid") + 
  geom_line(data = filter(econ, Y2K), size=1, linetype = "dashed")

ここに画像の説明を入力

PS プロット幅を変更して、スパイク アーティファクト (赤い線) を削除します。

于 2015-04-15T13:25:01.030 に答える
4
require(dplyr)
require(ggplot2)
require(lubridate)
require(tidyr)


economics %>%
  gather(indicator, percentage, c(4:5), -c(1:3, 6)) %>%
  mutate(Y2K = year(date) >= 2000) %>%
  ggplot(aes(date, percentage, colour = indicator)) + 
  geom_line(size=1, aes(linetype = Y2K))
于 2015-04-15T13:32:14.350 に答える