Контролюйте розмір точок у R розсіювачі?


116

У R plot()функція приймає pchаргумент, який контролює появу точок на графіку. Я роблю розсипи з десятками тисяч точок і віддаю перевагу маленькій, але не надто маленькій крапці. В основному, я вважаю, pch='.'що це занадто мало, але pch=19бути занадто жирним. Чи є щось посередині чи якимось чином зменшити точки вниз?


Замість того, щоб робити крапки менше, чи існує спосіб просто побудувати графік, скажімо, що 100 випадкових точок даних було б легше побачити, ніж 1000?
user2363642

Для багатьох невеликих точок використання альфа (прозорості) може зробити сюжетний розкид набагато більш інформативним, ніж просто використання меншої кількості точок для його побудови.

1
Я пропоную не використовувати pch='.', це буде поза центром. Джерело: Я pch='.'часто використовував
geneorama

@geneorama Ви маєте на увазі використання ·замість .?
nanaki

@nanaki більш-менш, але як не дивно, ваш символ відображається у вигляді крихітних коробок, коли я його використовую в Р. Наведені нижче відповіді непогано роз’яснюють правильний підхід.
генеорама

Відповіді:


100

Спробуйте cexаргумент:

?par

  • cex
    Числове значення, що дає суму, на яку графік тексту та символів слід збільшувати відносно за замовчуванням. Зауважте, що у деяких графічних функціях, таких як plot.default, є аргумент цього імені, який примножує цей графічний параметр, а деякі функції, такі як точки, приймають вектор значень, які переробляються. Інші напрями прийматимуть лише перше значення, якщо подається вектор довжини більше одного.

15
я не думаю, що я коли-небудь використовувати "cex" для контролю розміру символу, якщо б у мене не було іншого варіанту. Це працює лише деякий час; правило полягає в тому, що коли "cex" встановлюється через "par", це впливає на розмір (більшості) тексту на графіку, якщо він встановлений всередині "plot", "cex" впливає на розмір символу. Тож якщо ви неправильно застосовуєте це правило, то не тільки розмір вашого символу не змінюється, але тепер у вас є кілька параметрів, що впливають на розмір тексту (cex.axis, cex.lab, cex.main і cex.sub - все це робити те саме робота як "cex", лише по мірі). Такий код важко підтримувати і розширювати.
дог

5
Погодьтеся. Налаштування в cexусьому світі за допомогою parзмін усіх речей, включаючи цифри, які потрібно виправити. однак налаштування cexвсередині plot, здається, працює.
летить

Порада, висловлена ​​вище за коментарем Дуга, не обов'язково є помилковою, але вона значно завищує будь-які потенційні проблеми з використанням cexаргументу під час складання плану. Є багато, багато випадків, коли це є і корисним, і найкращим варіантом.
joran

lwdкерує шириною лінії pch, наприклад plot(1:5, pch=1:5, col=1:5, lwd=1:5). Дякую sthda.com/english/wiki/…
geneorama

95

pch = 20 повертає символ розміром між "." і 19.

Це заповнений символ (який, мабуть, ви хочете).

Крім цього, навіть базова графічна система в R дозволяє користувачеві тонко контролювати розмір, колір та форму символу. Наприклад,

dfx = data.frame(ev1=1:10, ev2=sample(10:99, 10), ev3=10:1)

with(dfx, symbols(x=ev1, y=ev2, circles=ev3, inches=1/3,
                  ann=F, bg="steelblue2", fg=NULL))

Приклад графіку


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

pi*R^2(поверхня) повинна бути пропорційною кількості спостережень.
SESman

5
@saratis Це зробить те, що ви хочете:symbols(x=dfx$ev1, y=dfx$ev2, circles=sqrt(dfx$ev3/pi), inches=1/3, ann=F, bg="steelblue2", fg=NULL)
відзначте

1
будь-яка ідея про те, як я міг би використовувати це для побудови декількох серій на одному графіку? тобто "точки (x = dfx2 $ ev1, y = dfx2 $ ev2, кола = dfx2 $ ev3, ...)" не працює.
Неодиме

Якщо вам цікаво "Що таке дюйм?" дивіться тут
MichaelChirico

22

Як зазначено в rcs , cexвиконаємо роботу в базовому графічному пакеті. Я вважаю, що ви не бажаєте робити свій графік, ggplot2але якщо у вас є, є sizeестетичний атрибут, який ви можете легко контролювати ( ggplot2має зручні для користувача функції функції: замість введення тексту cex(розширення символів), ggplot2ви можете вводити, наприклад, size = 2і ви отримаєте точку 2 мм).

Ось приклад:

### base graphics ###
plot(mpg ~ hp, data = mtcars, pch = 16, cex = .9)

### ggplot2 ###
# with qplot()
qplot(mpg, hp, data = mtcars, size = I(2))
# or with ggplot() + geom_point()
ggplot(mtcars, aes(mpg, hp), size = 2) + geom_point()
# or another solution:
ggplot(mtcars, aes(mpg, hp)) + geom_point(size = 2)

4
І якщо ви дійсно намічаєте десятки тисяч точок, ggplot2 має кілька альтернативних способів зробити так, щоб це виглядало приємно - налаштування альфа, шестигранники, контурні графіки тощо. Перегляньте сторінки 72-77 книги ggplot2, чи є така у вашій бібліотеці або якщо у вашій бібліотеці є електронний доступ до книг Спрингера (я думаю, що більшість книг R є там).
Метт Паркер

Так ... Я особливо використовую alphaв розсіювачі, щоб уникнути перезволоження.
aL3xa

@ aL3xa Ви можете використовувати альфа в базовому графічному пакеті. Просто додайте, наприклад, col = rgb(0, 0, 0, 0.6)у параметри сюжету.
RobJan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.