fanshijie7157
大家好!
现在想绘制柱状图,且每个柱子相对应的标签名称(通过names.arg添加之后的名称)根据需要可以设置成不同的颜色,请问利用R的barplot可以实现吗,如何实现呢?谢谢。
R.A.Fisher
col向量是用来设置颜色的
fanshijie7157
谢谢楼上的回答,但是我尝试过barplot的col调节的是柱子的颜色,而此处我想调的是对应每个柱子的标签,通过names.arg添加的,所以不知道你所说的col是不是能调节此处的颜色。
cauwinphone
通过col.axis="blue"设置
boxplot(len ~ dose, data = ToothGrowth, subset = supp == "VC", col = "yellow",
main = "Guinea Pigs' Tooth Growth", xlab = "Vitamin C dose mg", col.lab="red", col.axis="blue",
ylab = "tooth length", xlim = c(0.5, 3.5), ylim = c(0, 35), yaxs = "i")
要想查图的各项设置,在Rstudio中的帮助里,搜索par关键词,里面有各种参数的控制。
fanshijie7157
谢谢楼上的回答,根据你的建议,我使用了col.axis=”blue”,的确可以改变标签的颜色,但是我希望进行的是在不同的条件下标签设为不同的颜色,所以一幅图上标签颜色会有两种或者两种以上,我所写的主要代码如下,但是结果中会提示错误,请问这是社么原因?
png("rank.png",width=3500,height=2000)
par(mar=c(20,20,2,10),mgp=c(7.5,1.7,0),font.axis=2,font.lab=2,yaxs="i",xaxs="i")
data<-read.csv("1.csv",header=T,sep=",")####data中包含 ratio SUMMED_RANK 以及 name三列
data$axiscol=data$ratio#####根据data数据框中ratio元素设置标签颜色axiscol
attach(data)
for(i in 1:length(ratio))
{
if(ratio<0){
axiscol<-"royalblue2"
}else if(ratio>0)
{
axiscol<-"firebrick4"
}
}
bb=barplot(SUMMED_RANK,names.arg=name,las=2,yaxt="n",col=axiscol,xlim=c(0.2,138),ylim=c(0,1700),
cex.names=2.5,cex.lab=4,horiz=F,ylab="Summed Rank for Centrality",col.axis= axiscol)
axis(1,at=seq(0.1,137.8,1.2),labels=NA,tck=-0.1)
axis(2,at=seq(0,1700,100),labels=seq(0,1700,100),cex.axis=2.5,las=2)
dev.off()
在运行之后会提示错误:Error in plot.window(xlim, ylim, log = log, ...) : graphical parameter "col.axis" has the wrong length请问在使用col=axiscol会调节相应的柱子颜色,但是col.axis=axiscol会提示长度不对,请问我应该如何设定,谢谢。
cauwinphone
我将你的代码复制到Rstudio中,发现你所用的引号为中文格式的,需要全部检查一下,全部改为英文状态的。然后再运行一下看看。由于我没有你的数据,没有再进一步演示。
fanshijie7157
谢谢楼上的热心帮助,我检查了我的程序,程序中确定没有中文引号,应该是我将代码粘贴到这个网页上时,它会自动转为中文引号。1.csv中前20行的数据是这样的:
ratio name SUMMED_RANK
1.322 GAPDH 1630
-1.96 PC 1618
-1.47 GLUD1 1572
1.07 MDH1 1559
1.247 EEF2 1545
2.185 GNB2L1 1499
1.122 KRAS 1445
-1.858 MET 1441
-1.874 YES1 1436
2.332 EZR 1428
-1.454 AP2A2 1383
3.314 RNPS1 1360
2.153 RPS15 1239
1.549 RPS3 1238
1.128 HSPA8 1230
-1.155 RPS9 1230
1.812 RPS8 1224
1.383 HSPB1 1220
-2.29 AGL 1202
1.092 RPSA 1202
完整的代码格式是下面列示出的:
png("minus_EAA-plus_EAA_rank.png",width=3500,height=2000)
par(mar=c(20,20,2,10),mgp=c(7.5,1.7,0),font.axis=2,font.lab=2,yaxs="i",xaxs="i")
data<-read.csv("1.csv",header=T,sep=",")
data$axiscol=data$ratio
attach(data)
for(i in 1:length(ratio))
{
if(ratio<0){
axiscol<-"royalblue2"
}else if(ratio>0)
{
axiscol<-"firebrick4"
}
}
bb=barplot(SUMMED_RANK,names.arg=name,las=2,yaxt="n",col=axiscol,xlim=c(0.2,138),ylim=c(0,1700),
cex.names=2.5,cex.lab=4,horiz=F,ylab="Summed Rank for Centrality",col.axis=axiscol)
axis(1,at=seq(0.1,137.8,1.2),labels=NA,tck=-0.1)
axis(2,at=seq(0,1700,100),labels=seq(0,1700,100),cex.axis=2.5,las=2)
dev.off()
运行之后,会提示出两处错误,1:在子程序下面提示有错误There were 50 or more warnings (use warnings() to see the first 50),但是我使用use warnings(),它又没告诉我是什么错误,实际上即使此处提示了错误,但是只要将现在程序中col.axis=axiscol改成col.axis="blue",是能输出正常的图片的。2barplot运行之后提示Error in plot.window(xlim, ylim, log = log, ...) : graphical parameter "col.axis" has the wrong length,此处应该是影响图片不能正常输出的原因。此外,我在barplot中使用参数col=axiscol,col.axis="blue",图片是能输出来 的,而且柱子是根据axiscol变化,标签颜色为蓝色,所以我猜想还是col.axis=axiscol这个地方有问题,但是我又不知道如何解决,谢谢你的耐心帮助。