[解決済み] 複雑なプロットのために手動で凡例を作成する
2023-05-21 17:01:25
質問
このプロットに手動で凡例を設定する方法がわかりません。私が本当に欲しいのは、3つの色を使い、それぞれの隣に名前がある、右側のシンプルな凡例だけです。
現在のコードはこのようになっています。
a <-c("S1","S2","S3","S4","S5","S6","S7","S8","S9") #names
b <-c(0.23,0.26,0.55,0.56,0.36,0.23,0.18,0.06,0.04) #mean t0
c <-c(0.64,0.6,0.81,1.4,0.89,0.55,0.48,0.22,0.09) #mean t1
d <-c(0.20,0.23,0.52,0.53,0.33,0.20,0.15,0.04,0.03) #SD low t0
e <-c(0.26,0.29,0.58,.59,0.39,0.26,0.21,0.08,0.05) #SD high t0
f <-c(0.67,0.63,0.86,1.44,0.93,0.59,0.51,0.25,0.10) #SD high t1
g <-c(0.61,0.57,0.78,1.36,0.85,0.53,0.45,0.19,0.08) #SD low t1
h <-c(0.41,0.34,0.26,0.84,0.53,0.32,0.30,0.16,0.05) #absolute change
data <- data.frame(a,b,c,d,e,f,g,h)
ggplot(data=data,aes(a)) +
geom_bar(stat="identity", aes(y=h),fill="#62c76b",colour="#333333")+ #green
geom_line(aes(y=b,group=1),size=1.0,colour="#f04546") + #red
geom_point(aes(y=b),size=3, colour="#f04546") + #red
geom_errorbar(aes(ymin=d, ymax=e), colour="#f04546", width=0.1, size=.8) +
geom_line(aes(y=c,group=1),size=1.0,colour="#3591d1") + #blue
geom_point(aes(y=c),size=3, colour="#3591d1") + #blue
geom_errorbar(aes(ymin=f, ymax=g), colour="#3591d1", width=0.1, size=.8) +
ylab("Symptom severity") + xlab("PHQ-9 symptoms") +
ylim(0,1.6) +
theme_bw() +
theme(axis.title.x = element_text(size = 15, vjust=-.2)) +
theme(axis.title.y = element_text(size = 15, vjust=0.3))
どのように解決するのですか?
凡例を作成するために、属性と美観(aes文内の色)を対応させる必要があります。
cols <- c("LINE1"="#f04546","LINE2"="#3591d1","BAR"="#62c76b")
ggplot(data=data,aes(x=a)) +
geom_bar(stat="identity", aes(y=h, fill = "BAR"),colour="#333333")+ #green
geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red
geom_point(aes(y=b, colour="LINE1"),size=3) + #red
geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) +
geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue
geom_point(aes(y=c,colour="LINE2"),size=3) + #blue
geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) +
scale_colour_manual(name="Error Bars",values=cols) + scale_fill_manual(name="Bar",values=cols) +
ylab("Symptom severity") + xlab("PHQ-9 symptoms") +
ylim(0,1.6) +
theme_bw() +
theme(axis.title.x = element_text(size = 15, vjust=-.2)) +
theme(axis.title.y = element_text(size = 15, vjust=0.3))
<イグ
Roland の言い分も理解できますが、これはたった 3 つの属性であり、棒グラフやエラーバーを重ね合わせると複雑になってしまうので、このままワイドフォーマットのデータを残すのが妥当でしょう。以下のようにすると、複雑さが少し軽減されるかもしれません。 geom_pointrange を使用する .
オリジナルのエラーバー凡例の背景色を変更するには、以下のように
+ theme(legend.key = element_rect(fill = "white",colour = "white"))
をプロット仕様に追加してください。異なる凡例をマージするには、通常、すべての要素について一貫したマッピングが必要ですが、現在、私の場合、黒い背景のアーティファクトを生成しています。私は
guide = guide_legend(fill = NULL,colour = NULL)
が凡例の背景をヌルに設定すると思ったのですが、そうではありませんでした。おそらく別の質問の価値があります。
ggplot(data=data,aes(x=a)) +
geom_bar(stat="identity", aes(y=h,fill = "BAR", colour="BAR"))+ #green
geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red
geom_point(aes(y=b, colour="LINE1", fill="LINE1"),size=3) + #red
geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) +
geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue
geom_point(aes(y=c,colour="LINE2", fill="LINE2"),size=3) + #blue
geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) +
scale_colour_manual(name="Error Bars",values=cols, guide = guide_legend(fill = NULL,colour = NULL)) +
scale_fill_manual(name="Bar",values=cols, guide="none") +
ylab("Symptom severity") + xlab("PHQ-9 symptoms") +
ylim(0,1.6) +
theme_bw() +
theme(axis.title.x = element_text(size = 15, vjust=-.2)) +
theme(axis.title.y = element_text(size = 15, vjust=0.3))
<イグ
凡例の黒い背景を取り除くには、凡例で使用されている
override.aes
の引数に
guide_legend
. この目的は、正しく割り当てられていないかもしれない凡例の特定の側面を指定できるようにすることです。
ggplot(data=data,aes(x=a)) +
geom_bar(stat="identity", aes(y=h,fill = "BAR", colour="BAR"))+ #green
geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red
geom_point(aes(y=b, colour="LINE1", fill="LINE1"),size=3) + #red
geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) +
geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue
geom_point(aes(y=c,colour="LINE2", fill="LINE2"),size=3) + #blue
geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) +
scale_colour_manual(name="Error Bars",values=cols,
guide = guide_legend(override.aes=aes(fill=NA))) +
scale_fill_manual(name="Bar",values=cols, guide="none") +
ylab("Symptom severity") + xlab("PHQ-9 symptoms") +
ylim(0,1.6) +
theme_bw() +
theme(axis.title.x = element_text(size = 15, vjust=-.2)) +
theme(axis.title.y = element_text(size = 15, vjust=0.3))
<イグ
関連
-
R 描画エラー plot.new() : 図形の余白が大きすぎる
-
R read.table Error:埋め込まれたヌルが含まれているようです。
-
R言語における共通関数
-
[解決済み] HTML、PDF、DOCXで見栄えのするシンプルな手動のRMarkdownテーブル
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み] Rの代入演算子"="と"<-"の違いは何ですか?
-
[解決済み] Rで2つのグラフを同じプロットで表示する
-
[解決済み] リストやデータフレームの要素にアクセスするためのブラケット[ ]とダブルブラケット[[ ]]の違いについて
-
[解決済み] リストをデータフレームに変換する
-
[解決済み] ggplotで凡例のタイトルを変更する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
二項演算子への非数値引数を報告するR言語エラー
-
Rのexpand.grid()コマンド
-
[解決済み] HTML、PDF、DOCXで見栄えのするシンプルな手動のRMarkdownテーブル
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] データフレームのリストを行単位で1つのデータフレームに結合する
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み] ggplot2 の棒グラフで棒を並べる
-
[解決済み] Rでオブジェクト(変数)が定義されているかどうかを確認するには?
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする