Построение двух факторов на одном графике - PullRequest
0 голосов
/ 01 ноября 2010

Скажем, у меня есть два фактора, и я хочу построить их на одном графике, оба фактора имеют одинаковые уровни.

s1 <- c(rep("male",20), rep("female", 30))
s2 <- c(rep("male",10), rep("female", 40))
s1 <- factor(s1, levels=c("male", "female"))
s2 <- factor(s2, levels=c("male", "female"))

Я бы подумал, что использование табличной функции дало бы правильный результат для построения графиков, но оно выскочило.

table(s1, s2)
        s2 
s1       male female   
male     10     10   
female    0     30

Итак, на самом деле два вопроса, что табличная функция делает, чтобы получить этот результат, и какую еще функцию я могу использовать для создания графа с двумя рядами, используя функции с одинаковыми уровнями?

Также, если это фактор, я использую barplot2 в пакете gplots для его построения.

Ответы [ 4 ]

5 голосов
/ 01 ноября 2010

Вы можете добиться чуть более подробных результатов с помощью решетчатого пакета:

s1 <- factor(c(rep("male",20), rep("female", 30)))
s2 <- factor(c(rep("male",10), rep("female", 40)))
D <- data.frame(s1, s2)

library(lattice)
histogram(~s1+s2, D, col = c("pink", "lightblue"))

alt text

Или, если вы хотите, чтобы мужчины / женщины находились рядом для облегчения сравнения:

t1 <- table(s1)
t2 <- table(s2)
barchart(cbind(t1, t2), stack = F, horizontal = F)

alt text

3 голосов
/ 01 ноября 2010

Два варианта создания немного разных форм графиков:

plot(s1, s2)

и

plot(table(s1,s2))

Первый - это spineplot, особый случай мозаичного графика, который метод plotдля table производит (второй пример).См. ?spineplot и ?mosaicplot для получения более подробной информации, и вы можете использовать эти функции напрямую, вместо общего plot(), если хотите.

Также взгляните на функцию mosaic() в vcd пакет в CRAN Мейера и др. (ссылка на vcd в CRAN)

table() создает таблицу сопряженности для двух факторов.

3 голосов
/ 01 ноября 2010

С ?table:

«таблица» использует факторы перекрестной классификации для построения таблицы сопряженности из подсчетов при каждой комбинации уровней факторов.

Когда вы делаете table(s1,s2), происходит следующее: функция рассматривает s1 и s2 как парные результаты.Фактически он говорит вам, что если бы вы взяли cbind(s1,s2), то было бы 10 рядов мужчин-мужчин, 10 мужчин-женщин и т. Д.

Чтобы понять это, рассмотрим очень тривиальный пример:

a <- c("M","M","F","F")
b <- c("F","F","M","M")
table(a,b)

  b
a   F M
  F 0 2
  M 2 0

Что вы должны сделать, это:

t1 <- table(s1)
t2 <- table(s2)
barplot(cbind(t1,t2), beside=TRUE, col=c("lightblue", "salmon"))
1 голос
/ 02 ноября 2010

Хм .. Я не думаю, что создание таблицы непредвиденных расходов - это то, что искала Кэмерон. Если я правильно его понял, я думаю, что он хотел создать фрейм данных с двумя переменными в нем, где s1 и s2 кажутся векторами одинакового размера. (Длина (S1) == Длина (с2)).

В этом случае ему просто нужно создать «таблицу» (думаю, он имел в виду data.frame), используя:

df = data.frame(s1=s1, s2=s2);

А затем нанесите 2 серии на одном графике.

Итак, что касается второго вопроса построения этих вещей, я бы использовал matplot. Например:

matplot(1:10, data.frame(a=rnorm(10), b=rnorm(10)), type="l", lty=1, lwd=1, col=c("blue","red"))

Учитывая, что у него есть данные о двух векторах, организованных в один data.frame с именем "df", он может сделать что-то вроде:

matplot(df, type="l", lty=1, lwd=1, col=c("blue","red"))

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...