2013-11-01 2 views
5

Я создаю корреляционную карту тепла в R с levelplot (решеткой). Мне нужны границы между ящиками, но не снаружи, так как это мешает границе участка. Как удалить внешние границы из ящиков?R levelplot удалить внешнюю границу (отрегулировать границу участка)

Вот мой код:

levelplot(matrix, border="black", 
      colorkey=list(height=.25, space="right", at=seq(-1, 1, .25), cuts=7), 
      scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
      main="Leaf Correlations", xlab="", ylab="", 
      col.regions=scalebluered) 

и вот как это выглядит .. Я не люблю двойные линии по краям ..

enter image description here

EDIT: здесь является воспроизводимым примером:

data(mtcars) 
cars.matrix <- as.matrix(mtcars[c(2:8)]) 
cars.corr <- cor(cars.matrix) 
levelplot(cars.corr, border="black", colorkey=list(height=.25, space="right", 
      at=seq(-1, 1, .25), cuts=7), 
      scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
      xlab="", ylab="") 
+0

Может удалить внешняя ограничивающая рамка вместо этого? Моя решетка немного ржавая, но может быть что-то вроде 'par.settings = list (axis.line = list (lwd = 0)', или, может быть, 'col =" white "' возможно. – joran

+0

Хммм ... что, кажется, удаляет все строки, в том числе тики ... – joran

+0

Любой шанс вы могли бы сделать минимально воспроизводимый пример? –

ответ

4

ОК, то исправить это просто, если немного неясными.

Просто используйте lattice.options(), чтобы сбросить значение axis.padding используется для факторов, изменяя его от значения 0,6 (немного отступа) по умолчанию 0,5 (без отступа), и вы должны быть хорошо:

lattice.options(axis.padding=list(factor=0.5)) 

## An example to show that this works 
data(mtcars) 
cars.matrix <- as.matrix(mtcars[c(2:8)]) 
cars.corr <- cor(cars.matrix) 
levelplot(cars.corr, border="black", colorkey=list(height=.25, space="right", 
      at=seq(-1, 1, .25), cuts=7), 
      scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
      xlab="", ylab="") 

enter image description here

Для возможной полезной ссылки на будущее я понял это, быстро взглянув на код, используемый prepanel.default.levelplot(). (Различные prepanel.*** функций отвечают, среди прочего, для определения координат и минимальную площади, которая должна быть выделена для каждой панели таким образом, чтобы объекты, которые будут построены в это все очень хорошо работает.)

head(prepanel.default.levelplot, 4) 

1 function (x, y, subscripts, ...)      
2 {             
3  pad <- lattice.getOption("axis.padding")$numeric 
4  if (length(subscripts) > 0) { 
+0

Спасибо! Не уверен, что я когда-нибудь это понял! В то же время я обнаружил, что библиотека corrplot имеет отличные варианты и может быть лучшим способом для меня, чем пытаться настроить levelplot для моих нужд. Используя мой пример выше, это также дает мне то, что я хочу: 'library (corrplot) corrplot (cars.corr, method =" shade ", shade.col = NA, tl.col =" black ", tl.srt = 45, addgrid.col = "black") ' – Paul

+1

@Paul - Понятно, хотя я только что добавил несколько заметок, которые, как мы надеемся, заставили бы процесс размышлений привести меня к этому варианту, немного более воспроизводимому вам и, возможно, другим. –

1

Немного копающих шоу that a lot of the par commands may not make it to Lattice package graphics. Например, par (bty = 'n') won't work in this levelplot example.

В отличие от базовых R-графиков, решетки-решетки не выполняются многими параметрами, заданными в функции par(). Чтобы просмотреть параметры, которые можно изменить, просмотрите справку (xyplot). Часто бывает проще установить эти параметры в функциях построения на высоком уровне ... вы можете писать функции, которые изменяют рендеринг панелей.

Попробуйте пропусканием цвет оси непосредственно в графической ала методом, предложенным Yangchen Lin здесь: R lattice 3d plot: ticks disappear when changing panel border thickness

axis.line = list(col='transparent') 
+0

Пробовал это, похоже, ничего не делал .. – Paul

+0

Не знаю, работает ли он в этом конкретном экземпляре, но полная опция для избавления от осевых линий будет 'par.settings = list (axis.line = list (col =" transparent ")). – user1521655

Смежные вопросы