Обычно я использую ggplot2, но в этом случае я использую обычную функцию image()
для построения тепловой карты большого набора данных. Я могу маркировать всех этикеток как красные, но я хочу, чтобы обозначить ось ординат с текстом различных цветов на основе вектора цветовых определений, которые я произвожу:Различные цвета осевых меток в R на основе другой переменной
grid = structure(c(1:12),.Dim = c(4,3))
labs = c("A","B","C")
image(1:4,1:3,grid,axes=FALSE, xlab="", ylab = "")
#This works but isn't the colors I want
axis(2,at=1:length(labs),labels=labs,las=2, adj=1,cex.axis=0.6,col.axis="red")
Это создает следующее изображение:
Я хотел бы метки а и с, чтобы быть черным и B, чтобы быть красным. Это то, что я пытался, но он дает ошибку «Неверная длина» ...
axiscolors = c("black","red","black")
axis(2,at=1:length(labs),labels=labs,las=2, adj=1, cex.axis=0.6, col.axis=axiscolors)
Это эффект после того, как я с некоторыми «реальных» данных ...
EDIT:
В качестве резервной копии, если это возможно в ggplot2, я, возможно, захочу изменить коэффициент кода. Есть еще несколько приложений, которые я бы использовал для этого.
Я придумал, как построить слой красных символов над верхними старыми этикетками, но предпочел бы нативный метод с вектором цвета, если это возможно ...
sublabs = c("B")
axis(2,at=match(sublabs,labs),labels=sublabs,las=2, adj=1, cex.axis=0.6, col.axis="red")
Другим способом будет использовать text()
, если я мог бы поставить метки вне сюжетного пространства ...
text(c(1,1,1),c(1,2,3),labs,col=c("black","red","black"))
UPDATE: ниже решение, которое работает с ggplot2
...
Не думаю, что вы найдете «собственный метод». Между авторами R существует довольно сильное культурное сопротивление в отношении того, что некоторые люди называют «харчевкой». –
Интересно. Я умный Tufte-an, но «харк-диаграмма» одного человека - это информация другого человека. (В примере, отличном от игрушки, у меня есть 91 значение по оси y, и я помечен 16 вновь перемешанными строками, чтобы выделить, где они выходят.) – beroe
Я действительно смотрел код, который подвергается постоянному пользователю и ничего не видел который может быть взломан в чистом R для 'graphics :: axis'. Интересно, может ли grid-графика предоставить проспект. Я вижу, что существует решетчатая версия 'lattice :: axis.default', и похоже, что раздел« do.labels »будет многообещающим. Возможно, вам также понадобится взломать 'решетка :: panel.axis'. –