在同一个图中绘制两个图[重复]
Posted
技术标签:
【中文标题】在同一个图中绘制两个图[重复]【英文标题】:Plot two graphs in the same plot [duplicate] 【发布时间】:2013-10-03 00:30:27 【问题描述】:The solution with ggplot in this question 对我的数据非常有效。但是,我正在尝试添加一个图例,但我尝试的所有方法都不起作用......
例如,在上述问题的ggplot示例中,如何添加图例以显示红色曲线与“海洋”相关,绿色曲线与“土壤”相关?是的,我想添加我将定义的文本,它与我的 data.frame 中的任何其他变量都不相关。
下面的例子是我自己的一些数据...
Rate Probability Stats
1.0e-04 1e-04 891.15
1.0e-05 1e-04 690
...
等(大约 400 行)。我有两个与上面类似的数据框。 所以我的代码是
g <- ggplot(Master1MY, aes(Probability))
g <- g + geom_point(aes(y=Master1MY$Stats), colour="red", size=1)
g <- g + geom_point(aes(y=Transposon1MY$Stats), colour="blue", size=1)
g + labs(title= "10,000bp and 1MY", x = "Probability", y = "Stats")
情节看起来像
我只想要一个红色和蓝色的图例,上面写着“大师”和“转座子”
谢谢!
【问题讨论】:
忽略链接问题的接受答案,改为查看第二个和第三个。 【参考方案1】:在ggplot
中,将数据保存为“长”格式通常最方便。在这里,我使用 reshape2
包中的函数 melt
将您的数据从宽格式转换为长格式。根据您指定不同aes
thetics(大小、形状、颜色等)的方式,将出现相应的图例。
library(ggplot2)
library(reshape2)
# data from the example you were referring to, in a 'wide' format.
x <- seq(-2, 2, 0.05)
ocean <- pnorm(x)
soil <- pnorm(x, 1, 1)
df <- data.frame(x, ocean, soil)
# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")
# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line()
编辑、设置图例名称和标签
# Manually set name of the colour scale and labels for the different colours
ggplot(data = df2, aes(x = x, y = value, colour = variable)) +
geom_line() +
scale_colour_discrete(name = "Type of sample", labels = c("Sea water", "Soil"))
Edit2,跟随新的样本数据
将您的数据假设从您的更新中转换为长格式。同样,我相信如果您以长格式保存数据,您的 ggplot
生活会更轻松。我将每一步都与我在第一个答案中使用的简单示例数据联系起来。请注意,有许多替代方法可以重新排列您的数据。这是一种方法,基于您在更新中提供的数据的小(不可复制)部分。
# x <- seq(-2, 2, 0.05)
# Master1MY$Probability
Probability <- 1:100
# ocean <- pnorm(x)
# Master1MY$Stats
Master1MY <- rnorm(100, mean = 600, sd = 20)
# soil <- pnorm(x,1,1)
# Transposon1MY$Stats
Transposon1MY <- rnorm(100, mean = 100, sd = 10)
# df <- data.frame(x, ocean, soil)
df <- data.frame(Probability, Master1MY, Transposon1MY)
# df2 <- melt(df, id.var = "x")
df2 <- melt(df, id.var = "Probability")
# default
ggplot(data = df2, aes(x = Probability, y = value, col = variable)) +
geom_point()
# change legend name and labels, see previous edit using 'scale_colour_discrete'
# set manual colours scale using 'scale_colour_manual'.
ggplot(data = df2, aes(x = Probability, y = value, col = variable)) +
geom_point() +
scale_colour_manual(values = c("red","blue"), name = "Type of sample", labels = c("Master", "Transposon"))
【讨论】:
也许值得将此示例添加到上面链接的问题中的 ggplot 答案中。对于一个有 12 票赞成的答案,这并不是ggplot
代码的一个很好的例子。
好点。 @Fabs 有点不幸偶然发现了一个宽幅示例。
谢谢!但我不认为这个例子现在对我有用......(或者我不理解这个例子,对此感到抱歉)......我将编辑我的问题并展示我的例子的一部分......也许有一种简单的方法可以做我想做的事....再次感谢!
再一次,我相信如果您将数据以长格式保存在数据框中,您的ggplot
生活会更加轻松。尝试查看更新中的不同“真实”变量如何与您引用的测试数据中的变量相对应,并按自己的方式处理(一个)长数据框。我添加了一个小例子。
您好,谢谢!现在我明白了,我可以使用我的数据进行复制。再次感谢!以上是关于在同一个图中绘制两个图[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在一个图中构建两个图,模块 Matplotlib [重复]