2016-05-12 167 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") 
)