我正在尝试绘制一个简单的(scree)-plot,其中包含一些额外的geom_hline
和geom_vline
。
问题是:无论何时我添加show_guide=TRUE
或都会向aes()
添加一些geom_xline
,我搞砸了原始传奇。
这是一些(丑陋)假数据:
exdf <- data.frame(rep(x=1:12, times = 3), rep(x = c("A", "B", "C"), times = 6), rnorm(36), stringsAsFactors = FALSE)
colnames(exdf) <- c("PC", "variable", "eigenvalue")
这是我的情节:
g <- ggplot(data = exdf, mapping = aes(x = factor(PC), y = eigenvalue))
g <- g + geom_line(mapping = aes(group = factor(variable), linetype = variable))
g <- g + geom_vline(xintercept = 7, colour = "green", show_guide = TRUE)
如何在不污染其他图例的情况下为geom_vline
添加单独的图例?
无法解决为什么一个图层的颜色会改变另一个图例的颜色。
答案 0 :(得分:2)
这部分解决了这个问题:
g <- ggplot(data = exdf, mapping = aes(x = factor(PC), y = eigenvalue))
g <- g + geom_line(mapping = aes(group = factor(variable), linetype = variable))
g <- g + geom_vline(aes(xintercept = x, colour = Threshold), data.frame(x = 7, Threshold = "A"), show_guide = TRUE) + scale_colour_manual(values = c(A = "green")
但是传说仍然会有变量部分的十字架,尽管不是绿色部分。
或者,您可以使用带有两行的新数据框的geom_line,两行的x和y相同,等于数据的下限和上限。这将为您提供一个图例,该图例的阈值为水平绿线,没有垂直线。
答案 1 :(得分:0)
根据@Nick K在上面的建议,这里有一种方法可以通过不同的data =
对不同的图层使用干净的图例。
exdf <- data.frame(rep(x=1:12, times = 3), rep(x = c("A", "B", "C"), times = 6), rnorm(36), stringsAsFactors = FALSE)
colnames(exdf)&lt; - c(&#34; PC&#34;,&#34;变量&#34;,&#34;特征值&#34;) g&lt; - ggplot() g&lt; -g + geom_line(data = exdf,mapping = aes(x = factor(PC),y = eigenvalue,group = factor(variable),linetype = variable)) G 阈值&lt; - data.frame(阈值=&#34;阈值-A&#34;,PC = 7,ymin = min(exdf $ eigenvalue),ymax = max(exdf $ eigenvalue)) g&lt; -g + geom_linerange(data = thresholds,mapping = aes(x = PC,ymin = ymin,ymax = ymax,color = threshold)) 克
的产率:
注意:
exdf
是愚蠢的,并且是一个丑陋的情节;这不是重点。data =
参数,并将第一个g <- ggplot()
保留为空,否则ggplot2会对数据框感到困惑。geom_vline
应该。作为附加组件,(不是解决方案!),这里 应如何与geom_vline
一起使用:
exdf <- data.frame(rep(x=1:12, times = 3), rep(x = c("A", "B", "C"), times = 6), rnorm(36), stringsAsFactors = FALSE)
colnames(exdf) <- c("PC", "variable", "eigenvalue")
g <- ggplot()
g <- g + geom_line(data = exdf, mapping = aes(x = factor(PC), y = eigenvalue, group = factor(variable), linetype = variable))
g
g + geom_vline(data = thresholds, mapping = aes(xintercept = PC, color = threshold), show_guide = TRUE)
的产率:
如同geom_vline
所期望的那样填充y高度,但以某种方式会弄乱variable
的传说(注意垂直线)。
不知道为什么会这样,对我来说感觉就像一个小虫。 报道了这里:https://github.com/hadley/ggplot2/issues/1267