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

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

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

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

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

1896閲覧

Rでgeom_tileを使い、ヒートマップを作成する際に軸の目盛位置を指定したい

miki_meteo

総合スコア1

ggplot2

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

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2021/01/23 06:05

編集2021/01/23 06:06

前提・実現したいこと

ヒートマップの目盛を任意の位置に調整したい。

Rのggplot2、geom_tileを利用して、ヒートマップを作成しています。
対象データは3列で、1列目要素1は955から985まで5ごとに、2列目要素2は25から150まで25ごとに区分し、それぞれの該当数を3列目としています。
要素1、2の値はそれぞれの上限値
(『要素1:960、要素2:75』は要素1の値が955より大きく960以下、かつ、要素2が50より大きく75以下)なので、
縦軸ではタイルの上端、横軸ではタイルの右端に目盛を表示させたいです。

要素1 要素2 該当数
955  25   1
955 50 2
955 75 9
955 100 10
955 125 6
955 150 2
960 25 0
960 50 7
960 75 10
960 100 20
960 125 8
960 150 9
965 25 0
(以下同様に繰り返し)

該当のソースコード

library(tidyverse)

bofu <- read_csv("「対象データ名」.csv")

ggplot()+
geom_tile(data = bofu, aes(x = 「要素1」, y = 「要素2」, fill = 「該当数」))+
geom_text(data = bofu, aes(x = 「要素1」, y = 「要素2」, label = 「該当数」))+
scale_fill_gradient(low = "white",high = "steelblue")

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

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

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

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

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

guest

回答1

0

ベストアンサー

geom_tile()は,タイルの中心(今回であれば要素1)とwidthで指定した
幅のタイルを描きます.

今回のように,タイルの右端を要素1としたい場合
以下のようにエステ属性に指定する
値とwidthを調整すれば可能ですが,タイルが重なって描かれてしまいます.

例)aes(x= 要素1-5,width=10)とした場合

要素1左端右端
955945955
960950960

タイル間の重なりをなくしつつ,簡潔にx軸の値を指定したい場合は
代わりにgeom_rect()を使うとよいかと思います.
以下関数のドキュメントの引用ですが,タイル描画のために指定する位置が異なるだけで
やっていることは同じです.

geom_rect() and geom_tile() do the same thing, but are parameterised differently: geom_rect() uses the locations of the four corners (xmin, xmax, ymin and ymax), while geom_tile() uses the center of the tile and its size (x, y, width, height). geom_raster is a high performance special case for when all the tiles are the same size.

今回であれば,xmin,yminにそれぞれ要素1-5,要素2-25を指定すれば
各タイルの最大値を軸に表示可能です.

R

1 #データ準備 2bofu<- data.frame(matrix(c(955,25,1, 3 955,50,2, 4 955,75,8, 5 955,100,10, 6 955,125,6, 7 955,150,2, 8 960,25,0, 9 960,50,7, 10 960,75,10, 11 960,100,20, 12 960,125,8, 13 960,150,9, 14 965,25,0), 15 13,3,byrow=T,dimnames = list(c(),c("要素1","要素2","該当数")))) 16 17ggplot()+ 18 geom_rect(data = bofu, aes(xmin=要素1-5 ,xmax = 要素1 ,ymin= 要素2-25, ymax = 要素2, fill = 該当数))+ 19 geom_text(data = bofu, aes(x = 要素1-2.5 , y = 要素2 - 12.5 , label = 該当数))+ 20 scale_fill_gradient(low = "white",high = "steelblue") + 21 xlab("要素1") + ylab("要素2")

投稿2021/01/23 08:21

yyki

総合スコア38

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

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

miki_meteo

2021/01/30 03:28

ありがとうございます。 描きたかったグラフを作成することができました。 geom_rectの方も試してみました。こちらも参考にして今後も勉強させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問