2016-11-04 48 views
1

名前付きベクトルを使用してggplot2のマニュアルスケールで色を設定する場合、変数を名前の1つとして使用すると、その色は最終プロットには表示されません。手動ggplotスケールで名前付きベクトルの動作を説明できる人はいますか?

library(ggplot2) 

first_species <- 'setosa' 
colours <- c(first_species = 'black', 
      'versicolor' = 'cadetblue', 
      'virginica' = 'hotpink') 

ggplot(iris) + 
    aes(x = Petal.Length, y = Petal.Width, colour = Species) + 
    geom_point() + 
    scale_colour_manual(values = colours) 

Missing a colour

私は名前を使用して名前のベクトルを作成する場合は、プロットが期待通りに表示されます。

colours <- c('black', 'cadetblue', 'hotpink') 
names(colours) <- c(first_species, 'versicolor', 'virginica') 

ggplot(iris) + 
    aes(x = Petal.Length, y = Petal.Width, colour = Species) + 
    geom_point() + 
    scale_colour_manual(values = colours) 

Correct plot

誰も私にこの動作を説明できますか?私はそれが非標準的な評価に関係していると思われます(ggplot2は値ではなく名前を使用していますか?)。

提案手動スケール設定関数で変数を使用する最良の方法は、分かります!

+2

:あなたはrunif("n"=10)のような名前を引用することができますということは、あなたが引数としてそれ以外の場合は解析できない名前を置くことができますパーサの機能です。 cadetblue '、' virginica '=' hotpink ')、名前(色)をチェックすると、ファーストネームは "setosa"ではなく "first_species"に設定されています。 これは、ggplot()をプロットしてもデータ内の「first_species」が見つからず、プロットされないためです。 –

+1

'names'で2行を使用するのではなく、名前を設定するコードを1行にしたい場合は、その状況の便利な機能である' setNames'を使用できます。 – aosmith

答えて

1

あなたが何かの操作を行います。

runif(n=10) 

nがここに名前であり、そしてそれが変動したように評価されていません。やっよう

c(n=1) 

そのを。その名前付き引数。 「=」カワラタケ、C(first_speciesは=「黒」 - 色<後、最初の例では

list("this has spaces" = 99) # works, list(this has spaces=99) fails 
+0

さて、これは理にかなっています。確認するには:名前付きベクトルの名前は単なる文字とは何か異なりますか? –

+0

私の混乱の一部は、 'is.character(names(colors))'が真であると思います。しかし、私は関数が文字に変換すると仮定します。 –

+0

ああ、私はあなたがこれを行うことができないことを知りませんでした: 'c(= 4、a = 5、thing = 8)'。私は、 'c()'は名前付き引数を取る他の関数とは異なった働きをしていると思います。さて、これは理にかなっています! –

関連する問題