質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ggplot2

ggplot2は、統計解析向けのプログラミング言語及びその開発実行環境であるR言語のグラフィック作成用のライブラリです。

Q&A

解決済

1回答

1064閲覧

ggplot2 fillの色を統一したい.

binary

総合スコア33

ggplot2

ggplot2は、統計解析向けのプログラミング言語及びその開発実行環境であるR言語のグラフィック作成用のライブラリです。

0グッド

0クリップ

投稿2022/11/22 22:51

質問を見て頂きありがとうございます.
拙い質問ですがよろしくお願いいたします.
分かりにくい箇所があれば,質問してください.
よろしくお願いいたします.

前提

Rを用いて図1のような教室数と生徒数がどのように遷移するかの図を作っています.教室数は生徒数から求めたものです.その教室数を学校が保有している教室数と比較することで,過不足も判定し,棒グラフの色によって表示している状況です.

↓図1
図1

分析すべき学校が複数あるためfor文で一括して図を出力しています.
すると,図2に示す通り教室状況を示す色が図1と異なってしまい,分かりにくい図になってしまいました.

↓図2
図2
例えば,図1では”足りる”が赤になっていますが,図2では黄色になっています.

実現したいこと

図1でも図2でも”足りる”を示す色を同じにしたい.

該当のソースコード

R

1for (sname in sname_list){ 2 number = number + 1 3#グラフ作成用の名前を作成 4 npng = paste(as.character(number),".png") 5 name_tmp = paste("小学校",as.character(number)) 6 7#グラフ作成用にテーブルから要素を取り出す 8 tmp_table = sumary_table[sumary_table$s_list == sname,] 9 #y1軸を教室数 10 y1.lim = c(0,max(tmp_table$classes)+5) 11 y2.lim = c(0,max(tmp_table$pop)+150) 12 scaler = (y1.lim[2] - y1.lim[1])/(y2.lim[2] - y2.lim[1]) 13 14 15 p = ggplot(tmp_table) + 16 geom_bar(aes(x=y_list,y=classes,fill=phase),stat="identity",width=0.7) + 17 geom_line(aes(x=y_list,y=pop*scaler,colour="小学生数"),size=1) + 18 scale_fill_manual(values=c("#2e9c28","#e6d92e","#b03125"),name="教室状況") + 19 scale_y_continuous(limit=y1.lim, expand = c(0, 0), 20 sec.axis=sec_axis(trans = ~ ./scaler, 21 breaks=seq(from=y2.lim[1], to=y2.lim[2], by=100),name="小学生数")) + 22 labs(x="\n年\n", y="\n教室数\n", color = "", 23 title='\n各小学校区の小学生数と教室数の遷移', 24 subtitle=name_tmp) 25 #print(p) 26 plot(p) 27

sumary_tableについて説明します.
y_listが年,classesが教室数,popが生徒数,phaseが教室状況("足りる","整備すれば足りる","整備しても足りない")

以上,よろしくお願いいたします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

irisでの作図したサンプルで回答します。
iris.colのようなものを作ってscale_fill_manual()で指定してあげれば、特定のfactorごとに色を固定できると思います。

R

1library(tidyverse) 2 3iris.col <- c("red", "blue", "green") 4names(iris.col) <- unique(iris$Species) 5 6# 3種類で色分け 7iris %>% 8 ggplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Species)) + 9 geom_bar(stat="identity")+ 10 scale_fill_manual("Legend", values = iris.col) 11 12# setosaを抜いているが、他の色は上と同じ 13iris %>% filter(Species != "setosa") %>% 14 ggplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Species)) + 15 geom_bar(stat="identity")+ 16 scale_fill_manual("Legend", values = iris.col)

投稿2022/11/26 10:22

NamerikawaR

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

binary

2022/11/26 19:28

質問に回答して下さりありがとうございます. NamerikawaRさんのおっしゃるとおりにすると,私が望んでいたとおりのグラフになりました. そのおかげで非常に見やすいレポートになりました. どうすればよいか途方に暮れていたので本当に助かりました. 本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問