R 颜色/线条标签在ggplot中按字母顺序排序。如何避免?
我试图从同一个图形上的数据集中绘制3条线,并使用ggplot2显示它们。 我想手动设置每行的颜色和形状 问题是颜色/形状是根据标签的字典顺序设置的,我似乎无法控制选择什么 这就是我尝试过的:R 颜色/线条标签在ggplot中按字母顺序排序。如何避免?,r,plot,ggplot2,R,Plot,Ggplot2,我试图从同一个图形上的数据集中绘制3条线,并使用ggplot2显示它们。 我想手动设置每行的颜色和形状 问题是颜色/形状是根据标签的字典顺序设置的,我似乎无法控制选择什么 这就是我尝试过的: px <- ggplot(dataset) + stat_smooth(aes(x=id, y=dataset[,4], colour="2000", linetype="2000"),se=FALSE, size=1, span=0.1, level=0.90, method=
px <-
ggplot(dataset) +
stat_smooth(aes(x=id, y=dataset[,4], colour="2000", linetype="2000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
stat_smooth(aes(x=id, y=dataset[,3], colour="500", linetype="500"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
stat_smooth(aes(x=id, y=dataset[,2], colour="1000", linetype="1000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
theme(legend.title=element_blank()) +
xlab("x") +
ylab("y") +
ggtitle("px")
py <-
ggplot(dataset) +
stat_smooth(aes(x=id, y=dataset[,4], colour="1000", linetype="1000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
stat_smooth(aes(x=id, y=dataset[,3], colour="500", linetype="500"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
stat_smooth(aes(x=id, y=dataset[,2], colour="2000", linetype="2000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
theme(legend.title=element_blank()) +
xlab("x") +
ylab("y") +
ggtitle("py")
pz <-
ggplot(dataset) +
stat_smooth(aes(x=id, y=dataset[,4], colour="B1000", linetype="B1000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
stat_smooth(aes(x=id, y=dataset[,3], colour="C500", linetype="C500"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
stat_smooth(aes(x=id, y=dataset[,2], colour="A2000", linetype="A2000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
theme(legend.title=element_blank()) +
ylab("y") +
xlab("x") +
ggtitle("pz")
我想要上一个一样的东西,在图例框上有这些精确的颜色、形状和顺序,但不必在每个标签前加上ABC
我该怎么做
PS:即使我使用的是stat_smooth,geom_line也会出现同样的情况您的问题是因为在ggplot2中,事情不是这样做的。如果您曾经在
aes()
的内部使用[
,这肯定表明您做错了
我们没有对单个geom
进行三次单独调用,而是将数据帧融化,然后将变量映射到美学
dat <- read.table(text = " id A B C
1 1 0 26 44
2 2 0 0 0
3 3 0 0 46
4 4 26 22 0
5 5 16 0 0
6 6 0 0 30",header = TRUE,sep = "")
require(reshape2)
datm <- melt(dat,id.vars = 'id')
datm$variable <- factor(datm$variable,levels = c('C','A','B'))
ggplot(datm) +
geom_line(aes(x = id,y = value,colour = variable,linetype = variable))
dat你的问题是因为这不是在ggplot2中做事情的方式。如果你在aes()
中使用[
,那肯定是你做错了
我们没有对单个geom
进行三次单独调用,而是将数据帧融化,然后将变量映射到美学
dat <- read.table(text = " id A B C
1 1 0 26 44
2 2 0 0 0
3 3 0 0 46
4 4 26 22 0
5 5 16 0 0
6 6 0 0 30",header = TRUE,sep = "")
require(reshape2)
datm <- melt(dat,id.vars = 'id')
datm$variable <- factor(datm$variable,levels = c('C','A','B'))
ggplot(datm) +
geom_line(aes(x = id,y = value,colour = variable,linetype = variable))
dat为什么要写color=“B1000”
?为什么不写color=“1000”
?因为我希望2000出现在1000之前。因为它是按字母顺序排序的,所以1000“小于”2000为什么要写color=“B1000”
?为什么不写color=“1000”
?因为我希望2000出现在1000之前。因为它是按字母顺序排序的,所以1000是“小于”2000。没有显示任何内容。这是我的“datm”上的内容头部id变量值11 0 2 0 3 3 0 4 26 5 5 16 6 6 0摘要id变量值最小值:1 C:0 Min:0.00第一区:1627 A:0第一区:18.00中位数:3253 B:0中位数:38.00平均值:3253 NA:19515 Me安:38.92第三区:4879第三区:60.00最大值:6505最大值:100.00 NA's:7846。00@DavidAnderson那么,您的实际数据与您在问题中显示的示例数据不同(您会注意到,如果您逐字运行我的代码,它会正常工作)如果我没有你的数据的准确表示,我就帮不了你。在你的情况下,看起来有很多缺少的值。有没有办法在这里上传我的真实数据?我的完整脚本是:@DavidAnderson不需要。请注意,在问题中的示例数据中,列名是a、B和C。这就是我在重新排序时使用的在factor
中的e factor级别。看看你的代码。你的列名实际上只是一个B和C吗?也许你应该试着更仔细地修改我的代码…?嗯,就是这样。问题是名字没有注意到。现在它工作了。谢谢!没有显示。这是我的“datm”上的内容头部id变量值11 0 2 0 3 3 0 4 26 5 5 16 6 6 0摘要id变量值最小值:1 C:0 Min:0.00第一区:1627 A:0第一区:18.00中位数:3253 B:0中位数:38.00平均值:3253 NA:19515 Me安:38.92第三区:4879第三区:60.00最大值:6505最大值:100.00 NA's:7846。00@DavidAnderson那么,您的实际数据与您在问题中显示的示例数据不同(您会注意到,如果您逐字运行我的代码,它会正常工作)如果我没有你的数据的准确表示,我就帮不了你。在你的情况下,看起来有很多缺少的值。有没有办法在这里上传我的真实数据?我的完整脚本是:@DavidAnderson不需要。请注意,在问题中的示例数据中,列名是a、B和C。这就是我在重新排序时使用的在factor
中的e factor级别。看看你的代码。你的列名实际上只是一个B和C吗?也许你应该试着更仔细地修改我的代码…?嗯,就是这样。问题是名字没有注意到。现在它工作了。谢谢!