2016-07-05 3 views
1

У меня есть следующий код в R:условной окраски в столбчатой ​​графике в R

dat <- as.matrix(read.table(text ="2011 2012 2013 2014 
      A -330.2165 500.53 730.75 -130.0941 
      R 2036.32 1155.91 345.81 218.0350", header=TRUE)) 

pts <- pretty(c(min(dat),max(dat))) 

barplot(dat, 
     ylim=c(min(pts),max(pts)), 
     col=c("mediumvioletred","midnightblue"),  
     legend.text=c("Appropriation","Receipts"), 
     args.legend = list(x="topleft", bty="n")) 

Проблема заключается в том, что все присвоения (A) значения должны быть «mediumvioletred», в то время как все значения квитанции (R) должен быть «midnightblue». Вместо этого происходит то, что, если значения A отрицательные, они также окрашены «midnightblue».

Кто-нибудь знает, как это исправить? Или, по крайней мере, указать цвет для каждой точки?

Я нашел множество решений по окрашиванию в гистограммах, но не сложенными гистограммами. Это сообщение пришло так близко: Conditional Barchart coloring with a vector in R, но все равно не решило мою проблему.

ответ

0

Хотя не полностью удовлетворяет, вы можете сделать это с помощью некоторых дополнительных шагов:

# get the size of first bar (blue) with positive second bar added on 
# first plot (blue) 
barplot(firstBar, 
     ylim=c(min(pts),max(pts)), 
     col="midnightblue") 
# add second plot (red) 
barplot(dat[1,], col="mediumvioletred", add=TRUE) 
# add legend 
legend(x="topright", legend=c("Receipts", "Appropriation"), 
     fill=c("midnightblue", "mediumvioletred"), bty="n") 

Второй шаг добавляет первый ряд на верхней части второго ряда.

В качестве альтернативы, вы можете использовать у = TRUE, в соседних имеют штриховые графики, а не сложенных из них:

barplot(dat, 
     col=c("mediumvioletred", "midnightblue"),  
     legend.text=c("Appropriation","Receipts"), 
     args.legend = list(x="topleft", bty="n"), beside=TRUE) 
Смежные вопросы