【问题标题】:ggplot2: Different legend symbols for points and linesggplot2:点和线的不同图例符号
【发布时间】:2014-12-22 15:41:42
【问题描述】:

已经搜索了所有与此相关的线程,但找不到解决方案。

这是我的代码和附加的绘图结果:

g <-ggplot(NDVI2, aes(LAI2, NDVI, colour = Legend)) + 
    theme_bw (base_family = "Times") + 
    scale_colour_manual (values = c("purple", "green", "blue", "yellow",  "magenta","orange", "cyan", "red", "black")) + 
    geom_point (size = 3) +
    geom_smooth (aes(group = 1, colour = "Trendline"), method = "loess", size = 1, linetype = 5, se = FALSE) +
    geom_smooth (aes(group = 1, colour = "Regression (log)"),linetype = 1, size=1.2,method = "lm", formula = y~ log(x), se = FALSE) + 
    labs (title = "Correlation of LAI and NDVI")+ 
    theme (legend.title = element_text (size = 15)) 

这导致了这个情节:

如您所见,所有图例图标看起来都一样。我想要的是点显示为点,两条线(“回归”和“趋势线”)显示为线。

我尝试使用

guides (colour = guide_legend (override.aes = list(size = 1.5)))

但这又以同样的方式给了我所有图标,我不知道如何区分它们

我是 R 新手,这是我的第一个“复杂”情节。尝试通过在线帮助和谷歌找出大多数问题,但找不到解决此问题的方法。感谢大家的时间和帮助!

这是我的数据的dput

dput(NDVI2)
structure(list(MeanRED = c(3.240264, 6.97950484, 3.75052276, 
4.62617908, 4.07743944, 4.88961572, 3.15865532, 2.28368236, 3.40793788, 
4.28833416, 4.52529496, 2.45698208, 3.84003364, 4.31006672, 3.29672264, 
4.21926652, 4.64357012, 3.94445908, 3.95942484, 1.22673756, 4.70933136, 
5.33718396, 5.71857348, 5.7014266, 3.85938572, 6.07816804, 2.93602476, 
5.00289296), MeanNIR = c(46.8226195806452, 48.4417953548387, 
47.8913064516129, 43.9416386774194, 44.7524788709677, 52.2142607741935, 
48.6422146774194, 44.6617992580645, 57.7213822580645, 58.5066447096774, 
56.6924350967742, 57.4100250967742, 58.0419292903226, 58.7054423225806, 
58.5283540645161, 54.7658463548387, 58.8950077096774, 58.2421209354839, 
57.8538210645161, 50.209727516129, 59.5780209354839, 60.1662100645161, 
62.1929408387097, 60.3309026451613, 57.859932516129, 63.5678422258065, 
55.2536370967742, 60.1808743548387), NDVI = c(0.870552242769623, 
0.748129155560663, 0.854748647859414, 0.809496111062421, 0.832994214160536, 
0.828746627367857, 0.878046244390978, 0.902709173224405, 0.888500710549276, 
0.863417928083076, 0.852157374806182, 0.917918660181389, 0.875891666709934, 
0.863206160341016, 0.893353221193523, 0.856937918252258, 0.853834622095331, 
0.873141147848366, 0.871890732089488, 0.952300860559358, 0.853491201866442, 
0.837040994913869, 0.831587513918106, 0.827314084928549, 0.874937512911774, 
0.825455384542418, 0.899087753174211, 0.846498808949291), LAI2 = c(1.1, 
1.2, 1.3, 1.4, 2.1, 2.2, 2.3, 2.4, 3.1, 3.2, 3.3, 3.4, 4.1, 4.2, 
4.3, 4.4, 5.1, 5.2, 5.3, 5.4, 6.1, 6.2, 6.3, 6.4, 7.1, 7.2, 7.3, 
7.4), Legend = c("LAI 1", "LAI 1", "LAI 1", "LAI 1", "LAI 2", 
"LAI 2", "LAI 2", "LAI 2", "LAI 3", "LAI 3", "LAI 3", "LAI 3", 
"LAI 4", "LAI 4", "LAI 4", "LAI 4", "LAI 5", "LAI 5", "LAI 5", 
"LAI 5", "LAI 6", "LAI 6", "LAI 6", "LAI 6", "LAI 7", "LAI 7", 
"LAI 7", "LAI 7")), .Names = c("MeanRED", "MeanNIR", "NDVI", 
"LAI2", "Legend"), class = "data.frame", row.names = c("LAI 1-1", 
"LAI 1-2", "LAI 1-3", "LAI 1-4", "LAI 2-1", "LAI 2-2", "LAI 2-3", 
"LAI 2-4", "LAI 3-1", "LAI 3-2", "LAI 3-3", "LAI 3-4", "LAI 4-1", 
"LAI 4-2", "LAI 4-3", "LAI 4-4", "LAI 5-1", "LAI 5-2", "LAI 5-3", 
"LAI 5-4", "LAI 6-1", "LAI 6-2", "LAI 6-3", "LAI 6-4", "LAI 7-1", 
"LAI 7-2", "LAI 7-3", "LAI 7-4"))

【问题讨论】:

    标签: r plot ggplot2 icons legend


    【解决方案1】:

    override.aes 绝对是自定义图例的良好开端。在您的情况下,您可以删除图例中不需要的shape,方法是将它们设置为NA,并将不需要的linetype 设置为blank

    ggplot(data = NDVI2, aes(x = LAI2, y = NDVI, colour = Legend)) + 
      geom_point(size = 3) +
      geom_smooth(aes(group = 1, colour = "Trendline"),
                   method = "loess", se = FALSE, linetype = "dashed") +
      geom_smooth(aes(group = 1, colour = "Regression (log)"),
                   method = "lm", formula = y ~ log(x), se = FALSE, linetype = "solid") +
      scale_colour_manual(values = c("purple", "green", "blue", "yellow", "magenta","orange", "cyan", "red", "black"),
                           guide = guide_legend(override.aes = list(
                             linetype = c(rep("blank", 7), "solid", "dashed"),
                             shape = c(rep(16, 7), NA, NA))))
    

    【讨论】:

    • 非常感谢亨利克。您在“scale_colour_manual”中插入了“指南”。如果我这样做,R 会告诉我它不知道“指南”功能。然后我将其修改为 "+ guides (color = guide_legend (override.aes = list(linetype = c(rep("blank", 7), "solid", "dashed"), shape = c(rep(16, 7 ), NA, NA))))" 并且它起作用了。你能解释一下为什么吗?此外,在这一行中,我没有深入了解所有命令。这真的是唯一的方法吗?我发现这是一个非常标准的程序,因此代码对我来说相当复杂。
    • 按照设计,ggplot 在您输入 aes(或不输入)的内容与由此产生的图例外观之间有很强的联系。自定义图例可能有点骇人听闻。您可以search SO for "guide_legend(override.aes" 在答案中寻找替代解决方案。干杯。
    • 我已经研究了几个小时的情节,这篇文章对我帮助很大。比我正在看的其他东西要容易得多。谢谢!
    猜你喜欢
    • 2015-08-11
    • 2021-01-09
    • 2013-10-27
    • 1970-01-01
    • 2012-12-09
    • 2015-12-23
    • 2013-04-25
    • 2013-12-25
    • 2011-01-16
    相关资源
    最近更新 更多