Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 颜色/线条标签在ggplot中按字母顺序排序。如何避免?_R_Plot_Ggplot2 - Fatal编程技术网

R 颜色/线条标签在ggplot中按字母顺序排序。如何避免?

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=

我试图从同一个图形上的数据集中绘制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="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吗?也许你应该试着更仔细地修改我的代码…?嗯,就是这样。问题是名字没有注意到。现在它工作了。谢谢!