Создание легенды к графику plot на основе факторных данных

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 14
Откуда: Кривий Ріг

Создание легенды к графику plot на основе факторных данных

Сообщение ymr3R9Jge » 17 дек 2011, 03:29

Проблема в следующем:
Есть таблица (data frame). Столбцы А и В несут информацию о содержаниях химических элементов. Класс столбцов - numeric. Столбцы Q, W, и R несут информацию соответственно о типе горной породы, кратком обозначении и цвете каждой разновидности (которым она будет обозначаться на графике). Класс столбцов - factor. Цвет указан в шестнадцатиричной кодировке (#0000ff и т.д.). При этом столбцы W и R были получены из столбца Q с последующей модернизацией.
Строим график (корреляционное поле):
plot(A, B, pch=20, cex=0.7, col=as.character(R))
получаем график, на котором разновидности пород обозначены разным цветом.
А вот добавить легенду не получается. Из множества вариантов удалось подобрать только один, который закрашивает условные обозначения в соответствии с указанным цветом. Но при этом цвета перепутываются:
legend("bottomleft", title="Poroda", as.character(levels(W)), fill=as.character(levels(R)))

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Создание легенды к графику plot на основе факторных данн

Сообщение gamm » 17 дек 2011, 15:52

ymr3R9Jge писал(а):Но при этом цвета перепутываются:
legend("bottomleft", title="Poroda", as.character(levels(W)), fill=as.character(levels(R)))
я чего вы ожидали, если названия берутся из одного места, а цвета из другого (а перед этим уровни сортируются порознь лексикографически)? :mrgreen:

соберите руками легенду в массив с двумя столбцами, и используйте их вместо levels(), или, задайте уровни явно, в нужном порядке, когда создаете факторы (что есть то же самое). Или, напишите функцию, которая создает уровни столбца R из уровней столбца W, и вставьте в fill() легенды (что есть опять то же самое).

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 14
Откуда: Кривий Ріг

Re: Создание легенды к графику plot на основе факторных данн

Сообщение ymr3R9Jge » 17 дек 2011, 18:35

gamm писал(а): соберите руками легенду в массив с двумя столбцами, и используйте их вместо levels()...
А можно немного подробнее - как напрямую, без лексикографической сортировки, передать в массив факторные столбцы из таблицы данных?

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Создание легенды к графику plot на основе факторных данн

Сообщение gamm » 17 дек 2011, 20:04

ymr3R9Jge писал(а):А можно немного подробнее - как напрямую, без лексикографической сортировки, передать в массив факторные столбцы из таблицы данных?
не, не столбцы передать, а явно указать уровни при создании факторов, причем указать в "правильном" порядке.

R<-factor(temp.R, levels=c("1","5","3"))
W<-factor(temp.W, levels=c("Алевролит","Песчаник","Мергель"))

тогда 1 будет соответствовать Алевролиту, 5-Песчанику, и т.д., они пойдут в нужном порядке. Иначе - лексикографически, см. help для factor()

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 32 гостя