0

ファセットと手動の色割り当てを使用するggplotチャートがあります。の呼び出しでscale_colour_manual使用される値を変更するために他の領域を掘り下げる必要がないように、呼び出し自体の外部で変数を定義したいと思いbreaksます。valuesscale_colour_manual

これらが変数であるとしましょう。

var1 <- 'series.a'
var1.label <- "Series A result"
var2 <- 'series.b'
var2.label <- "Series B result"

valuesまたはbreaks私はこのようなものを使用することができます:

c('Series A result' = alpha("blue", 0.5),'Series B result' = alpha("red",0.5))

上記のコードは次の出力を生成するため、これはうまくプロットされます。

Series A result Series B result 
    "#0000FF80"     "#FF000080"

このコードに対して:

c(var1.label = alpha("blue", 0.5), var2.label = alpha("red",0.5))

これを生成するため、プロットされません。要素の名前は、色に使用している値、つまり「シリーズAの結果」および「シリーズBの結果」と一致しません。

 var1.label  var2.label 
"#0000FF80" "#FF000080"

c()したがって、問題は、変数の名前ではなく変数の値をどのように使用できるかということのようです。

私は見てきましたがeval、彼らは私が望むことをしparseforceいないようです。これは本当に単純なRのピースだと思いますが、私がまだぶつかった問題ではありません。必要に応じて、サンプルコードを次に示します。

require(ggplot2)
require(reshape)
require(scales)

# Create data
set.seed(78910)
mydf <- data.frame(
                   mydate = seq(as.Date('2013-01-01'), 
                       as.Date('2013-01-10'), by = 'day'),
                   series.a = runif(10, 100, 200),
                   series.b = runif(10, 2000, 3000))
tail(mydf)
mymelt <- melt(mydf, id.var = 'mydate')

# Define user variables
var1 <- 'series.a'
var1.label <- "Series A result"
var2 <- 'series.b'
var2.label <- "Series B result"

# Which makes creating labels for the faceting easier
mymelt$label.col <- ifelse(mymelt$variable == var1, var1.label, var2.label)
tail(mymelt)

# Plots without problems
ggplot(mymelt, aes(y = value, x = mydate)) +
    geom_line(aes(colour = label.col)) +
    scale_colour_manual("",
                        breaks = c('Series A result','Series B result'),
                        values = c('Series A result' = alpha("blue", 0.5),
                        'Series B result' = alpha("red",0.5))) +
    facet_wrap(~ label.col, ncol = 1, scale = "free_y")

# Does not plot
ggplot(mymelt, aes(y = value, x = mydate)) +
    geom_line(aes(colour = label.col)) +
    scale_colour_manual("",
                        breaks = c(var1.label, var2.label),
                        values = c(var1.label = alpha("blue", 0.5),
                        var2.label = alpha("red",0.5))) +
    facet_wrap(~ label.col, ncol = 1, scale = "free_y")

# Not plotting because names in second case are not correct
c('Series A result' = alpha("blue", 0.5),'Series B result' = alpha("red",0.5))
c(var1.label = alpha("blue", 0.5), var2.label = alpha("red",0.5))

望ましい結果は、この種の画像です。

スクリーンショット

4

1 に答える 1

2
v <- c(alpha("blue", 0.5), alpha("red",0.5))
names(v) <- c(var1.label, var2.label)

> v
## Series A result Series B result 
##     "#0000FF80"     "#FF000080" 

次にvalues = v、コードで使用します。

于 2013-01-22T02:16:43.590 に答える