2013-12-01 7 views
0

Я в настоящее время имеют следующий R-код, и было интересно, если его можно выборочно полужирный/наклонным/применять другие стили меток на осиR выборочно стиль оси участок этикетки

> w1 <- read.csv(file="test1.csv",sep=",", head=TRUE) 
> w1$Commits <- w1$normal + w1$merges 
> w1 
     Commits normal merges 
John   4  3  1 
Sarah  19  13  6 
Zach   3  3  0 
Jacob  27  24  3 
> titles <- w1$merges/w1$Commits 
> titles <- sprintf("%s%%", format(round(titles * 100), 1)) 
> bp <- barplot(rbind(w1$normal, w1$merges), main="Playing with R", xlab="Who", names.arg=rownames(w1), col=c("blue", "red"), ylim = c(0,30)) 
> text(bp, rbind(w1$Commits), labels = titles, pos = 3, cex = 0.75) 

Это производит хорошее BarChart (Я мог бы, вероятно, использовать% d вместо формата, но это не важно), именно так, как я этого хочу, однако я также хочу, чтобы у вас был список имен в списке, так что внизу я могу, например, увидеть этикеты:

John Sarah Zach Jacob

Есть ли способ применить стили к этим ярлыкам? Или какой-то другой способ отметить некоторые бары как разные (серый фон и т. Д.)?

+0

Это должно зависеть от содержания «test1.csv», которые остаются скрытыми на вашем компьютере , Конечно, 'text' будет принимать выражения, но нам нужны данные для работы с магией. –

+0

@DWin Вот почему я показал результат оценки w1 – byteit101

+0

Лучше было бы вывести вывод dput (w1) –

ответ

1
bp <- barplot(rbind(w1$normal, w1$merges), 
      main="Playing with R", xlab="Who", names.arg=rep("",4), 
      col=c("blue", "red"), ylim = c(0,30)) 
text(bp, rbind(w1$Commits), labels = titles, pos = 3, cex = 0.75) 
axis(1, at=bp, labels= parse(text= 
        gsub("\\s", '~', paste0(c("bold(", "", "italic(", ""), 
              rownames(w1), 
              c( ")", "",  ")", "") 
         )    ) 
      )   ) 

enter image description here Это кажется довольно запутанно, но вы должны иметь, кажется, мои неудавшиеся попытки сделать вектор экспрессии длиной 4 с expression, bquote и substitute.

+0

Мне нужно было процитировать мои имена ростов, если у них есть такие пробелы, что parse получил 'bold ('John Smith')' – byteit101

+0

Использовать 'dput (w1)', чтобы опубликовать пример данных, который представляет сложность проблемы. Я не всегда сохраняю тестовые объекты, и в текущем экземпляре у меня больше нет ничего в моей рабочей области. –

+0

У меня на самом деле нет пробелов в моих данных, но, хотя я бы упомянул об этом в любом случае, если кто-то сделал это позже. – byteit101

2

Вот подход, использующий bquotedo.call)

# the order in which you want the "bolding" 
xx <- expression(bold(.(x)), italic(.(x)), .(x), .(x)) 
# a list of lists containing the information for bquote 
xL <- lapply(rownames(w1), function(x) list(x=x)) 
# using Map and do.call and as.expression to create the list of expressions 
labs <- as.expression(Map(function(expr,where) {do.call(bquote, list(expr,where))}, 
    expr = xx, where =xL)) 

bp <- barplot(rbind(w1$normal, w1$merges), 
     main="Playing with R", xlab="Who", names.arg=rep("",4), 
     col=c("blue", "red"), ylim = c(0,30)) 
text(bp, rbind(w1$Commits), labels = titles, pos = 3, cex = 0.75) 
axis(1, at=bp, labels= labs) 

Или так же с помощью substitute

xs <- expression(bold(x), italic(x), x, x) 
labs <- Map(function(expr,where) {do.call(substitute, list(expr,where))}, expr = xs, where =xL) 
Смежные вопросы