2016-05-12 125 views
5

我创建了以下barplot,但问题在于图例的颜色不正确,网格位于酒吧前面。我想在图例框中放置正确的列,并将栅格放在栅栏后面。为图例添加颜色

我也想提出打勾在每个栏的底部只是识别它们

我该怎么办R中这些功能?

barkplot

,我使用R脚本:

autos_data <- read.table("data.dat", header=T, sep="\t") 

barplot(rep(NA,length(autos_data)),ylim=c(0,max(autos_data)),axes=FALSE) 
barplot(t(as.matrix(autos_data)), main=NULL, ylab= "% of Cloud usage", xlab="Input data size (MB)", ylim=c(0,50), beside=TRUE, lwd=1:2, angle=c(45,135), density=seq(5,40,10), col=c("blue","red","black","darkgreen")) 
grid(NA, 5, lwd=1,lty=5, col="gray") # grid only in y-direction 

# Place the legend at the top-left corner with no frame 
coords="top" 
legend(coords, c("WestVirginia","Chicago I","Chicago II","California"), text.col=par("col"), cex=1.2, bty="n", xpd=TRUE, horiz=TRUE, inset=c(0,-.22), angle=c(35,135,45,135), density=seq(5,40,10),col=c("blue","red","black","darkgreen")) 

编辑:

dput(autos_data) 
structure(list(WestVirginia = c(29L, 29L, 23L, 23L), ChicagoI = c(30L, 
21L, 36L, 26L), ChicagoII = c(39L, 42L, 35L, 46L), California = c(2L, 
8L, 6L, 5L)), .Names = c("WestVirginia", "ChicagoI", "ChicagoII", 
"California"), class = "data.frame", row.names = c("1500", "3000", 
"4500", "6000")) 

数据:

West-Virginia ChicagoI ChicagoII California 
1500 29 30 39 2 
3000 29 21 42 8 
4500 23 36 35 6 
6000 23 26 46 5 
+0

可你'dput(autos_data)'不是我的回答 – rbm

回答

3

您可以直接计算出传说中的barplot调用,指定参数通过args.legend参数和文本通过legend.text。对于网格,你需要设置网格,白色,然后线后重新绘制barplot使电网没有出现在行再出现:

它需要同barplot的3个电话,但我认为它给你想要的东西:

# first plot 
barplot(t(as.matrix(autos_data)), main=NULL, axes=FALSE, beside=TRUE, col="white", ylab= "% of Cloud usage", xlab="Input data size (MB)", ylim=c(0,50)) 
# add the grid 
grid(NA, 5, lwd=1,lty=5, col="gray") # grid only in y-direction 
# hide the grid with white bars 
barplot(t(as.matrix(autos_data)), main=NULL, beside=TRUE, col="white", ylab= "% of Cloud usage", xlab="Input data size (MB)", ylim=c(0,50), add=TRUE) 
# plot the density lines, the legend, etc. 
barplot(t(as.matrix(autos_data)), main=NULL, axes=FALSE, beside=TRUE, 
     lwd=1:2, angle=c(45,135), density=seq(5,40,10), col=c("blue","red","black","darkgreen"), 
     legend.text=c("WestVirginia","Chicago I","Chicago II","California"), 
     args.legend=list(x="top", y=NULL, bty="n", ncol=4), add=TRUE) 

enter image description here

4

这是参数的名称不一致。

您需要设置fill

legend(coords, c("WestVirginia","Chicago I","Chicago II","California"), text.col=par("col"), 
     cex=1.2, bty="n", xpd=TRUE, horiz=TRUE, inset=c(0,-.22), angle=c(35,135,45,135), 
     density=seq(5,40,10), fill=c("blue","red","black","darkgreen")) 

enter image description here

+0

清洁(现已删除) –

0

在你legend设置fill而不是col

legend(
    coords, 
    legend = c("WestVirginia","Chicago I","Chicago II","California"), 
    text.col=par("col"), 
    cex=1.2, 
    bty="n", 
    xpd=TRUE, 
    horiz=TRUE, 
    inset=c(0,-.22), 
    angle=c(35,135,45,135), 
    density=seq(5,40,10), 
    fill=c("blue","red","black","darkgreen") 
)