18

プロットにこの 5 つの geom_vline() があり、それらを異なる色にしたいと考えています。それを行う方法はありますか?

ここに私のコードがあります、

library(ggplot2)

x <- seq(-7, 8, length = 90)
tvalues <- dt(x,15)

qplot(x, tvalues) + geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) + 
  geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) +
  geom_vline(xintercept = c(a <- c(-2.27685371,  0.01661155,  
  0.33598194,  1.92426022), mean(a)), linetype = "dashed", colour = "red") + theme_bw() + xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) +
  ylab(expression(bold(P(x)))) +
  opts(title = expression(bold("Student t Distribution")), plot.title = theme_text(size = 20, colour = "darkblue"),
       panel.border = theme_rect(size = 2, colour = "red"))

そして、ここに出力があります、

ここに画像の説明を入力

プロットの 5 本の縦線に注目してください。これらの線のそれぞれに異なる色を付けたいのですが、

私はこれを試しました

library(colorRamps)
geom_vline(xintercept = c(a <- c(-2.27685371,  0.01661155,  
   0.33598194,  1.92426022), mean(a)), linetype = "dashed", colour = matlab.like(5)) 

うまくいかなかった、別の試み

geom_vline(xintercept = c(a <- c(-2.27685371,  0.01661155,  
   0.33598194,  1.92426022), mean(a)), linetype = "dashed", colour = c("red","blue","green","yellow","orange"))

それでも失敗します。

前もって感謝します!

4

2 に答える 2

34

したがって、 ggplot2の背後にある基本的な考え方が欠けています。つまり、常にすべてのデータを に配置し、data.frameマップするすべての美学がデータ フレームの変数に対応するということです。

5 つの別々の呼び出しでそれぞれ異なる色の 5 つの垂直線を取得できますがgeom_vline、パッケージ全体の要点を逃しています。代わりに、データ フレームを作成します。

a <- c(-2.27685371,0.01661155,0.33598194,1.92426022)
vlines <- data.frame(xint = c(a,mean(a)),grp = letters[1:5])

grpにマップするグループ化変数を明示的に作成しましたcolour。次に、レイヤーを追加し、以下を使用して美学をこれらの変数にマッピングしますaes

qplot(x, tvalues) + 
  geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) + 
  geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) +
  geom_vline(data = vlines,aes(xintercept = xint,colour = grp), linetype = "dashed") + 
  theme_bw() + 
  xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) +
  ylab(expression(bold(P(x)))) +
  opts(title = expression(bold("Student t Distribution")), 
       plot.title = theme_text(size = 20, colour = "darkblue"),
       panel.border = theme_rect(size = 2, colour = "red"))

(色は破線であり、そのうちの 2 つがほぼ重なり合っているため、見分けがつきません。)

データをベクトルではなくデータ フレームに配置し始めると、ggplot2からさらに多くの情報が得られます。qplotggplot()

于 2012-06-19T14:09:19.317 に答える
9

1行だけ入れたい場合は、次を追加すると、赤い色と破線geomの縦線が追加されます.x=1

+ geom_vline(aes(xintercept=1), colour="#BB0000", linetype="dashed")
于 2017-04-18T16:32:37.273 に答える