Який хороший спосіб використовувати R, щоб зробити розсіювач, який розділяє дані обробкою?


30

Я взагалі новачок із R та статистикою взагалі, але мені потрібно зробити розсип, який, на мою думку, може перевищити його власні можливості.

У мене є пара векторів спостережень, і я хочу зробити з ними розсип, і кожна пара потрапляє в одну з трьох категорій. Я хотів би зробити розсип, який розділяє кожну категорію, або за кольором, або за символом. Я думаю, що це було б краще, ніж генерувати три різні розсіювачі.

У мене є ще одна проблема з тим, що в кожній з категорій є великі кластери в одній точці, але кластери в одній групі більше, ніж в двох інших.

Хтось знає хороший спосіб це зробити? Пакети, які мені слід встановити та навчитися користуватися? Хтось робив щось подібне?

Спасибі

Відповіді:


53

великі кластери : якщо проблема надрукування є проблемою, ви можете використовувати або нижню альфа, тому одиничні точки тьмяні, але надрукованість робить колір більш інтенсивним. Або ви переходите на 2d гістограми або оцінки щільності.

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    щільність
    Ви, напевно, захочете зіткнутися з цим ...

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    гексбін
    Хоча ви можете розробити цей сюжет і без граней, порядок друку виду впливає на остаточну картину.

  • Ви можете цього уникнути, якщо хочете трохи забруднити руки (= посилання на пояснення та код) та обчислити змішані кольори для шестикутників: введіть тут опис зображення

  • Іншою корисною справою є використання (шестигранних) бункерів для областей з високою щільністю та побудови окремих точок для інших частин:

    ggplot (df, aes (x = date, y = t5)) + 
      stat_binhex (data = df [df$t5 <= 0.5,], bins = nrow (df) / 250) +
          geom_point (data = df [df$t5 > 0.5,], aes (col = type), shape = 3) +
      scale_fill_gradient (low = "#AAAAFF", high = "#000080") +
      scale_colour_manual ("response type", 
        values = c (normal = "black", timeout = "red")) + 
      ylab ("t / s")

    введіть тут опис зображення


Для повноти складання пакетів дозвольте також зазначити lattice:

require ("lattice")
  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length | Вид, ірис, pch = 20) </code>

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length, iris, groups = iris $ Вид, pch = 20) </code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length | Вид, ірис, групи = ірис $ Види, pch = 20) </code>


Прекрасна! Дуже дякую, шестигранні бункери виконали трюк ідеально!
crf

22

Це одна з класичних проблем для набору даних "Ірис". Це посилання на цілий набір проектування проектів, заснований на наборі даних з кодом R, який ви, можливо, зможете адаптувати до вашої проблеми.

Ось підхід, який використовує базовий R, а не додатковий пакет.

plot(iris$Petal.Length, iris$Petal.Width, pch=21, 
     bg=c("red","green3","blue")[unclass(iris$Species)], 
     main="Edgar Anderson's Iris Data")

яка дає цю цифру:

введіть тут опис зображення

Звідти, залежно від вашого сюжету, ви можете почати возитись із рівнями альфа / прозорості, щоб дозволити перевитрати тощо, але я спершу будуватиму з дуже базового графіка.

Хоча є багато причин дотримуватися основи R, інші пакети спрощують побудову. Виділивши дані, відмінною рисою є одним з найсильніших сторін ggplot2 і решітки пакетів. ggplot2 робить особливо візуально привабливі сюжети. Обидва пакети продемонстровано у відповіді @cbeleites.


4
Трохи заплутаний, оскільки, хоча ви рекомендуєте ggplot2, ви не використовуєте його у своєму прикладі? Еквівалент ggplot2 повинен бути бібліотекою (ggplot2); qplot (Petal.Length, Petal.Width, color = Вид, дані = райдужка, головний = "Дані райдужки Едгара Андерсона"). Це також має перевагу в автоматичному створенні легенди.
Пітер Елліс

@PeterEllis Це тому, що, хоча я можу розпізнати щось, що добре піддається ggplot2, я лише навіть переживаю базову графіку.
Фоміт

1
Чудовий трюк з unclass () в базовій графіці BTW
Пітер Елліс

16

Або з ggplot2:

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) + geom_point()
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + facet_grid(~Species)

Що виробляє

введіть тут опис зображення

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.