2015-01-14 1 views
2

я нарисовал базовую карту с помощью spplot() (пакет зр)R spplot(), как изменить тип единицы масштабного бара

бар легенда шкала в десятичных разрядов от 0 до 1, но я на самом деле хотите, чтобы это показывало проценты.

Если я использую функцию Plot() для простого графика, я могу изменить масштаб, добавив их вручную. Есть ли эквивалентный способ сделать это в spplot, где я могу вручную определить тип устройства?

Пример:

library(sp) 
library(lattice) 
trellis.par.set(sp.theme()) # sets bpy.colors() ramp 
data(meuse) 
coordinates(meuse) <- ~x+y 
spplot(meuse, "ffreq") 

сюжет показывает, как 1,2,3 легенды. Что, если гипотетически я хотел показать это как $ 1, $ 2, $ 3?

ответ

3

legendEntries аргумент (showcased here) позволяет поставить символ вектор текстовых меток к spplot() легенды. Используйте его так:

spplot(meuse, "ffreq", legendEntries = paste0("$", levels(meuse$ffreq))) 

enter image description here

+0

Как применить это к примеру, когда мой масштаб определяется из непрерывных данных, а не дискретным? – shecode

+0

Мне удалось это сделать, используя аргумент ярлыков в spplot. т.е. legend_label_at = seq (0, max (потолок (x $ legend $ right $ args $ key $ at * 10)/10), 0.1) legend_label = paste0 (legend_label_at * 100, "%") labels = list ( at = legend_label_at, labels = legend_label) – shecode

+0

@shecode Хмм. Рад, что вы нашли решение, хотя аргумент ярлыков для меня здесь ничего не делает. Я также был в шоке от попыток сделать это изменение с помощью аргументов 'key =' и 'auto.key ='. (Последний тот, который кажется, должен ** работать **.) Для записи здесь две вещи, которые почти, но не работают: (1) 'spplot (meuse," ffreq ", simpleKey = list (текст = LETTERS [1: 3]))'; (2) 'spplot (meuse," ffreq ", auto.key = list (text = list (LETTERS [1: 3])))' –

0

Страница справки для sp :: spplot говорит, что это делается с использованием функций решетки и далее указано, что аргументы параметров scale можно передать так же, как и в xyplot. Это, однако, вряд ли повлияет на легенду, но скорее изменит аннотацию осей x и y. Когда я запускаю первый пример на странице справки, я получаю scale.bar, который идет от 0 до 500, причем только эти два значения являются метками. Рассматривая используемый код, можно сделать вывод, что «scale.bar» строится с аргументами, переданными в sp.layout, в этом случае list(l2,l3,l4,l5). После пары тупик попыток я пришел с этим предложением для того, как использовать решетки simpleKey функцию, чтобы поставить вашу модификацию легенды и сделать масштабную линейку, как и в первом примере:

library(sp); library(lattice) 
l2 = list("SpatialPolygonsRescale", layout.north.arrow(), offset = c(181300,329800), 
    scale = 400) 
l3 = list("SpatialPolygonsRescale", layout.scale.bar(), offset = c(180500,329800), 
    scale = 500, fill=c("transparent","black")) 
l4 = list("sp.text", c(180500,329900), "0") 
l5 = list("sp.text", c(181000,329900), "500 m") 

spplot(meuse, c("ffreq"), sp.layout=list(l2,l3,l4,l5) 
       ,key=simpleKey(text=paste0("$", 1:3))) 

Примечание: поскольку spplot является функция S4, это то, как вы можете получить код:

showMethods(spplot, class="SpatialPointsDataFrame", includeDefs=TRUE) 
1

Если построить фактор, просто меняя метки фактора может быть проще:

levels(meuse$ffreq) = c("a", "b", "c") 
spplot(meuse, "ffreq") 

legendEntries документирована, но не по имени аргумент spplot, поэтому отсутствует список аргументов. Метод spplot для объектов SpatialPointsDataFrame имеет аргумент colorkey для отображения непрерывных цветных клавиш; Предстоящий sp 1.0-18 позволит аргументу списка получить контроль над тем же аргументом в lattice::levelplot

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