1. ホーム
  2. r

[解決済み] R では、サイズと色のパラメータを変えて geom_path を使用します。

2022-03-03 22:53:09

質問

ggplot2のgeom_pathのsizeとcolorのパラメータでとても苦労しています。まず、私のデータとコード(両方とも短いもの)を共有し、次に私が得ているプロットを示し、そして私が得ようとしているプロットを説明させてください。私は今、この出力で本当に混乱しています。

# the data - x and y coordinates to plot
x_loc = c(39.29376, 39.44371, 39.59578, 39.7439, 39.88808, 40.18122, 
40.92207, 41.91831, 42.09564, 42.27909, 81.77751, 81.79779, 81.81031, 
81.81723, 81.81997, 81.81846)

y_loc = c(21.02953, 20.91538, 20.80633, 20.69479, 20.58158, 20.37095, 
19.87498, 19.38372, 19.31743, 19.26005, 35.55103, 35.64354, 35.7384, 
35.82535, 35.9067, 35.98656)

# creating the factor with which to base size and color off of
end = length(x_loc)
distances = sqrt(((x_loc[2:end] - x_loc[1:(end-1)]) ^ 2) + ((y_loc[2:end] - y_loc[1:(end-1)]) ^ 2))
my_colors = c('black', ifelse(distances > 0.5, 'red', 'black'))

# and now for my plot
ggplot() + 
geom_point(aes(x = x_loc, y = y_loc)) +
geom_path(aes(x = x_loc, y = y_loc, col = as.factor(my_colors), size = as.factor(my_colors)), 
        alpha = 1) + 
scale_color_manual(values = c("black", "red")) +
scale_size_manual(values = c(1.5, 0.45))

私のコードを実行したことがない人のために、私が得た出力プロットを示します。

以下は私が得たものですが、私が望むものではありません。私の目的は、座標点とその点を結ぶ線をプロットすることなので、geom_point() と geom_path() で別々のレイヤーを使っています。しかし、距離ベクトルで測定される非常に長い線(連続する座標間の距離が長い)については、線の色を赤にし、線を細くしたいと思います。短い距離の場合は、線の色を黒にして、線を太くしたいのです。

上のプロットで何が問題かというと、長い黒線はそこにあるべきでないということです。さらに黒い線が描かれていますが、これも表示されるべきではありません (他の赤い線があるところ)。

(座標をグループ (サイズによるグループと色によるグループ、両方とも my_colors ベクターを使用して設定) に分割することによって、geom_path は 2 つの別々のグループの点に対して 2 つの別々のパスを作成しており、それぞれのサイズと色が正しく設定されているように思われます。しかし、これは間違ったプロットになります)

私の説明が間違っていたら教えてください。何とかして真相を突き止めたいのです。私は今、私が望むものに似たプロットを手動で作成することに取り組み、それを使ってすぐに編集するつもりです

ありがとうございます。

EDIT: 期待しているのはこんな感じです。

これは、以下の5つのgeom_pathレイヤーを使って、多少ごまかしながら(16座標ならなんとかなるが、100Kでは無理という意味でのごまかし)作成したものである。

 ggplot() + geom_point(aes(x = x_loc, y = y_loc)) + 
    geom_path(aes(x = x_loc[1:6], y = y_loc[1:6]), 
              color = 'black',
              size = 1.5,
              alpha = 1) +
    geom_path(aes(x = x_loc[6:8], y = y_loc[6:8]), 
              color = 'red',
              size = 0.45,
              alpha = 1) + 
    geom_path(aes(x = x_loc[8:10], y = y_loc[8:10]), 
              color = 'black',
              size = 1.5,
              alpha = 1) + 
    geom_path(aes(x = x_loc[10:11], y = y_loc[10:11]), 
              color = 'red',
              size = 0.45,
              alpha = 1) + 
    geom_path(aes(x = x_loc[11:16], y = y_loc[11:16]), 
              color = 'black',
              size = 1.5,
              alpha = 1) 

解決方法は?

私は自分自身でこれを解決したと思います - これに取り組んでいる誰かのために、グループ化に関係しています。近日中に解決策を編集します。

EDIT

ggplot() + 

  geom_point(aes(x = x_loc, y = y_loc)) +
  geom_path(aes(x = x_loc, y = y_loc, col = my_colors, size = my_colors, group = my_group), 
            alpha = 1) + 
  scale_color_manual(values = c("black", "red")) +
  scale_size_manual(values = c(1.5, 0.45))

色とサイズを分割する前に、すべてを同じグループにまとめる必要がありました。