我有一个数据框,构造如下:
col1<-c(0.10, 0.21, 0.34, 0.39, 0.54, 0.67,0.89)
col2<-c (0,100,500,1000,3000,5000,8000 )
col3<-c ("b", "a","a","c", "c","b", "c" )
mydata<-data.frame(col1,col2,col3)
> mydata
col1 col2 col3
# 1 0.10 0 b
# 2 0.21 100 a
# 3 0.34 500 a
# 4 0.39 1000 c
# 5 0.54 3000 c
# 6 0.67 5000 b
# 7 0.89 8000 c
这是我在col2
和col1
之间创建情节的代码:
plot(mydata$col2,mydata$col1,
main = "plot of my data",
xlab = "x", ylab= "y",
pch =c(21,21,21)[mydata$col3], bg=c("blue","grey", "red")[mydata$col3],
)
legend("topright",pch=c(21,21,21), title="categories:",
c("a","b", "c"),pt.bg=c("blue","red","grey"))
它创建了情节:
我的代码存在问题:
1,图中应该有7个点,但是一个已被正确的盒子覆盖。是否有更好的方法来显示所有点?
2,我希望在x轴上有不同的比例来标记所需间隔的刻度线,例如。看到100和500之间的间隔几乎与3000和8000相同,因此较小的值不会被极端地抑制到左侧,这就是我想要的。如何实现?
3,似乎在我的语法pch =c(21,21,21)[mydata$col3], bg=c("blue","grey", "red")[mydata$col3]
中,我没有指定哪种颜色映射到“a”,“b”或“c”。如果我想分别将"blue","grey", "red"
中的颜色"a", "b" and "c"
映射到col3
。如何指定?
感谢任何建议。
答案 0 :(得分:1)
对于第二个,您可以使用自定义轴。在您的情况下,您想要自定义x轴。因此,在plot
函数中,您需要添加xaxt="n"
,这会禁用原始x轴。然后,您可以使用axis
添加您的。{1}}。在您的情况下,请尝试
axis(1, at=c(a,b,c,d,e),labels=c(a,b,c,d,e),xxx,xxx)
其中a,b,c,d,e是您想要的值。
示例:
y <- x <- c(1:5)
plot(x, y,type="l", xaxt="n")
axis(1, at=c(1,1.3,1.5,1.7,2.8),labels=c(1,1.3,1.5,1.7,2.8))
对于第三个问题,如何只添加一列映射颜色到dataframe
?如下:
例如,
mydata$color <-ifelse(mydata$col3=="a","blue",ifelse(mydata$col3=="b","red","grey"))
用蓝色映射a,用红色映射b,用灰色映射c。在情节中,
plot(mydata$col2,mydata$col1,xxxxxx, bg=mydata$color, )
答案 1 :(得分:1)
对于3,如果您不介意安装plyr
包,则可以使用mapvalues()
功能。在您的情况下,它将是bg=as.character(mapvalues(mydata$col3, from=c("a", "b", "c"), to=c("blue", "grey", "red")))
。这里的函数as.character()
是因为mapvalues()
的输出是一个因素。您还可以将数据框中的col3
更改为字符,然后mapvalues()
的输出将是字符。如果您不想安装新软件包,可以使用levels(mydata$col3) <- c("blue", "grey", "red")
更改col3
的级别。