前提・実現したいこと
Rのggplot2ライブラリを利用して以下のデータで作成したヒートマップ図と折れ線グラフを重ね合わせた図を作成したいです。
以下のdf_sのvariable列とdf_tpのprice列が同じ単位の値でそれらを縦軸として重ね合わせた図を作成したいのですがうまく行きません。
試したことに記載の部分までできているのですが、左側にdf_sのvariable列の尺度を表示させてうまく上下の空白をなくす方法を教えていだだきたいです。
【ヒートマップ図を作成するためのデータ】
R
1> head(df_s) 2 time variable value 31 2020-01-01T20:40:00Z 109.0 0.4483 42 2020-01-02T20:40:00Z 109.0 0.3204 53 2020-01-01T20:40:00Z 108.95 0.3267 64 2020-01-02T20:40:00Z 108.95 0.3596 75 2020-01-01T20:40:00Z 108.9 0.5764 86 2020-01-02T20:40:00Z 108.9 0.5557 9 10> sapply(df_s,class) 11 time variable value 12"character" "factor" "numeric"
【折れ線グラフを作成するためのデータ】
R
1> df_tp 2 time price 31 2020-01-01T20:40:00Z 108.628 42 2020-01-02T20:40:00Z 108.526 5 6> sapply(df_tp,class) 7 time price 8"character" "numeric"
発生している問題・エラーメッセージ
ただ以下のようにヒートマップ図と折れ線グラフが重ならない物ができてしまいます。
エラーメッセージ
該当のソースコード
上記のグラフを作成したプログラムは以下になります。
R
1ggplot(data = df_s, aes(x = time, y = variable)) + 2 theme_gray(base_family = "HiraKakuPro-W3") + 3 geom_tile(aes(fill = value)) + 4 scale_fill_gradientn(colours = c("yellow", "red")) + 5 geom_text(aes(label = value)) + scale_y_discrete(name="", limits = rev(levels(df_s$variable))) + geom_line(data = df_tp, aes(x = time, y = price, group = 1), color = "red")
試したこと
df_tpのprice列のデータ型がnumeric型で、ds_sのvariable列のデータ型がfactor型なのがいけないのかと思い、ds_sのvariable列のデータ型をnumeric型に変更してみで上記のコードを実行したのですが今度は左側のprice,variable列の値が出なくなってしまいました。
R
1> df_s$variable <- as.numeric(as.character(df_s$variable)) 2> head(df_s) 3 time variable value 41 2020-01-01T20:40:00Z 109.00 0.4483 52 2020-01-02T20:40:00Z 109.00 0.3204 63 2020-01-01T20:40:00Z 108.95 0.3267 74 2020-01-02T20:40:00Z 108.95 0.3596 85 2020-01-01T20:40:00Z 108.90 0.5764 96 2020-01-02T20:40:00Z 108.90 0.5557 10> sapply(df_s,class) 11 time variable value 12"character" "numeric" "numeric" 13 14> ggplot(data = df_s, aes(x = time, y = variable)) + 15 theme_gray(base_family = "HiraKakuPro-W3") + 16 geom_tile(aes(fill = value)) + 17 scale_fill_gradientn(colours = c("yellow", "red")) + 18 geom_text(aes(label = value)) + scale_y_discrete(name="", limits = rev(levels(df_s$variable))) + geom_line(data = df_tp, aes(x = time, y = price, group = 1), color = "red")
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー