楼主: 子衿1219
17561 26

[问答] ggplot2将两幅图的legend合并在一起。 [推广有奖]

11
子衿1219 发表于 2016-9-27 15:25:28
stormhz 发表于 2016-9-27 15:18
应该可以呀,你把数据和要求放在附件里,我看一下。
data.rar (379 Bytes) 本附件包括:
  • data.csv

12
子衿1219 发表于 2016-9-27 15:28:31
子衿1219 发表于 2016-9-27 15:25
附件中是6条线的数据集。每一列代表一条线。两个点可以分别为:x1 = 300
y1 = 0.5
y2 = 0.8
想要做成,三条蓝色的线,3条红色的线,1个红色的点,一个蓝色的点。线需要shape有区分。legend有名称。谢谢啦。

13
stormhz 发表于 2016-9-27 16:10:48
有的线基本重合,分辨不清。

data.pdf
下载链接: https://bbs.pinggu.org/a-2107363.html

29.26 KB

pdf

data.pdf

29.26 KB

把图例中的线调整了一下。

14
子衿1219 发表于 2016-9-27 21:21:50
stormhz 发表于 2016-9-27 16:10
有的线基本重合,分辨不清。
非常感谢你的回复。我有个小小的问题,为什么,我随意换一个da01 <- data.frame( x = x, y = data$y1, type = paste('l1') )里面的'l1'这些名字,或者我换list(linetype=c(1,12,23,3,32,6,0,0), shape=c(16,17,15,3,7,8,16,16)) 这些里的数字,都会完全打乱映射,legend与图文不符合了呢。

15
子衿1219 发表于 2016-9-27 21:32:34
子衿1219 发表于 2016-9-27 21:21
非常感谢你的回复。我有个小小的问题,为什么,我随意换一个da01
我觉得有点无法变化legend里面的shape,即使我更改了,只是legend有变化,但是图中是没有变化的。
如图中,我将l1的名字改了下,结果legend与图完全对应错位了。我变动override.aes =
list(linetype=c(1,3,2,4,6,9,0,0),shape=c(1,8,4,2,6,9,1,1)),无法改动图中。

16
子衿1219 发表于 2016-9-27 21:34:13
子衿1219 发表于 2016-9-27 21:21
非常感谢你的回复。我有个小小的问题,为什么,我随意换一个da01
我觉得有点无法变化legend里面的shape,即使我更改了,只是legend有变化,但是图中是没有变化的。
如图中,我将l1的名字改了下,结果legend与图完全对应错位了。我变动override.aes =
list(linetype=c(1,3,2,4,6,9,0,0),shape=c(1,8,4,2,6,9,1,1)),无法改动图中。 02.png

17
stormhz 发表于 2016-9-27 22:13:30
子衿1219 发表于 2016-9-27 21:34
我觉得有点无法变化legend里面的shape,即使我更改了,只是legend有变化,但是图中是没有变化的。
如图中 ...
中间加两行code:
  1. g <- g + scale_linetype_manual(values = c( 6,6,6,6,6,6))
  2. g <- g + scale_shape_manual(values = c( 6,6,6,6,6,6))
复制代码
分别调整六条线中的linetype和点的shape。由c()中的数字控制不同的形状。
  1. guides( colour = guide_legend( override.aes =
  2.                                           list(linetype=c(1,12,23,3,32,6,0,0), shape=c(16,17,15,3,7,8,16,16))) )
复制代码
上面这行专门调整图例,改图例的形状,不会影响图中的形状。

18
stormhz 发表于 2016-9-27 22:22:58
子衿1219 发表于 2016-9-27 21:34
我觉得有点无法变化legend里面的shape,即使我更改了,只是legend有变化,但是图中是没有变化的。
如图中 ...
你先把图画成自己满意的样子,最后对应图去调整图例。

19
子衿1219 发表于 2016-9-27 23:27:33
stormhz 发表于 2016-9-27 22:22
你先把图画成自己满意的样子,最后对应图去调整图例。
现在出现两个问题。一个是我加入你给我的代码到中间位置,产生线的后面。如果我运行“g <- g + scale_linetype_discrete( guide = FALSE )
g <- g + scale_shape_discrete( guide = FALSE )”
代码如下:
g <- ggplot()

g <- g + geom_line ( data = df, aes( x, y, color = type, linetype = type, stat = 'identity') )
g <- g + geom_point( data = df, aes( x, y, color = type, shape = type ) ,size = 3 )
g <- g + scale_linetype_manual(values = c( 6,6,6,6,6,6))
g <- g + scale_shape_manual(values = c( 6,6,6,6,6,6))
g

g <- g + geom_point( data = df2, aes( x, y, color = hh ), size = 3 )


g <- g1 + scale_color_manual(values = c( "red", "red", "red", "blue", "blue", "blue","red", "blue"))
g <- g + scale_linetype_discrete( guide = FALSE )
g <- g + scale_shape_discrete( guide = FALSE )

g <- g + guides( colour = guide_legend( override.aes =
                 list(linetype=c(6,6,6,6,6,6,0,0), shape=c(6,6,6,6,6,6,1,16))) )
g

11.png
如图,只有图例发生变化。

g <- g + scale_linetype_discrete( guide = FALSE )
g <- g + scale_shape_discrete( guide = FALSE )

如果我将上两句去掉。报错,并且有两个图例。
22.png

还有个问题是,我想区分,两个点,空心点,实心点。如何在图中也区分。
谢谢啦。。。。。

11.png (67.96 KB)

11.png

20
stormhz 发表于 2016-9-28 07:57:38
重新弄了下。

data.pdf

66.38 KB

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 02:14