Kontrolować wielkość punktów na wykresie rozrzutu R?

117

W języku R plot()funkcja przyjmuje pchargument kontrolujący wygląd punktów na wykresie. Tworzę wykresy rozrzutu z dziesiątkami tysięcy punktów i wolę małą, ale niezbyt małą kropkę. Zasadniczo uważam, że jestem pch='.'za mały, ale pch=19za gruby. Czy jest coś pośrodku lub jakiś sposób, aby jakoś zmniejszyć liczbę kropek?

Nacięcie
źródło
Zamiast zmniejszać kropki, czy istnieje sposób, aby po prostu wykreślić, że 100 losowych punktów danych byłoby łatwiejszych do zobaczenia niż 1000?
user2363642
W przypadku wielu małych punktów użycie współczynnika alfa (przezroczystości) może sprawić, że wykres punktowy będzie zawierał dużo więcej informacji niż zwykłe użycie mniejszej liczby punktów do wykreślenia.
1
Radzę nie używać pch='.', będzie poza środkiem. Źródło: używałem pch='.'często
geneorama
@geneorama Czy masz na myśli używanie ·zamiast .?
nanaki
@nanaki mniej więcej, ale dziwnie, kiedy używam go w R., twój symbol pojawia się jako małe pudełka. Poniższe odpowiedzi dobrze wyjaśniają właściwe podejście.
geneorama

Odpowiedzi:

101

Spróbuj cexargument:

?par

  • cex
    Wartość liczbowa określająca wielkość, o jaką drukowany tekst i symbole powinny zostać powiększone w stosunku do wartości domyślnej. Zauważ, że niektóre funkcje graficzne, takie jak plot.default, mają argument o tej nazwie, który zwielokrotnia ten parametr graficzny, a niektóre funkcje, takie jak punkty, akceptują wektor wartości, które są odtwarzane. Inne zastosowania przyjmą tylko pierwszą wartość, jeśli zostanie dostarczony wektor o długości większej niż jeden.
rcs
źródło
15
Nie sądzę, żebym kiedykolwiek użył „cex” do kontrolowania rozmiaru symbolu, chyba że nie miałbym innej opcji. Działa tylko przez pewien czas; zasada jest taka, że ​​gdy „cex” jest ustawiane za pomocą „par”, wpływa to na rozmiar (większości) tekstu na wykresie, gdy jest ustawione wewnątrz „plot”, „cex” wpływa tylko na rozmiar symbolu. Więc jeśli źle zastosujesz tę regułę, nie tylko rozmiar twojego symbolu nie zostanie zmieniony, ale masz teraz wiele parametrów wpływających na rozmiar tekstu (cex.axis, cex.lab, cex.main i cex.sub - wszystkie robią to samo praca jako `` cex '', tylko na części). Taki kod jest trudny do utrzymania i rozszerzania.
Doug
5
Zgodzić się. Ustawienie cexglobalne poprzez parzmiany wszelkiego rodzaju rzeczy, w tym marginesów rysunku, które musisz poprawić. wydaje się jednak, że ustawienie cexwewnątrz plotdziała.
leci
Rada wyrażona powyżej w komentarzu Douga niekoniecznie jest błędna, ale znacznie wyolbrzymia wszelkie potencjalne problemy z używaniem cexargumentu podczas kreślenia. Jest wiele, wiele przypadków, w których jest to zarówno przydatne, jak i najlepsza opcja.
joran
lwdkontroluje szerokość linii pch, np plot(1:5, pch=1:5, col=1:5, lwd=1:5). Dziękuję sthda.com/english/wiki/ ...
geneorama
95

pch = 20 zwraca symbol o rozmiarze od „.” i 19.

To wypełniony symbol (prawdopodobnie tego chcesz).

Poza tym nawet podstawowy system graficzny w R umożliwia użytkownikowi precyzyjną kontrolę nad rozmiarem, kolorem i kształtem symbolu. Na przykład,

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))

Przykład wykresu

Doug
źródło
Uwielbiam ten wykres, ale chciałbym, aby promień był równy liczbie obserwacji w tym punkcie, czy możesz mi pokazać, jak to zrobić?
Derk Arts
pi*R^2(powierzchnia) powinna być proporcjonalna do liczby obserwacji.
SESman,
5
@saratis To zrobi, co chcesz:symbols(x=dfx$ev1, y=dfx$ev2, circles=sqrt(dfx$ev3/pi), inches=1/3, ann=F, bg="steelblue2", fg=NULL)
fmark
1
masz pomysł, jak mógłbym to wykorzystać do wykreślenia wielu serii na tym samym wykresie? tj. „points (x = dfx2 $ ev1, y = dfx2 $ ev2, circles = dfx2 $ ev3, ...)” nie działa.
Neodyme
Na wypadek, gdybyś się zastanawiał „Co to jest cal?” patrz tutaj
MichaelChirico
22

Jak powiedział rcs , cexwykona zadanie w podstawowym pakiecie graficznym. Myślę, że nie chcesz robić swojego wykresu, ggplot2ale jeśli to zrobisz, istnieje sizeatrybut estetyczny, który możesz łatwo kontrolować ( ggplot2ma przyjazne dla użytkownika argumenty funkcji: zamiast wpisywać cex(rozszerzanie znaków), ggplot2możesz wpisać np. size = 2I otrzymasz punkt 2 mm).

Oto przykład:

### 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)
aL3xa
źródło
4
A jeśli naprawdę rysujesz dziesiątki tysięcy punktów, ggplot2 ma kilka alternatywnych sposobów, aby wyglądać ładnie - korekty alfa, kosze szesnastkowe, wykresy konturowe itp. Sprawdź strony 72-77 książki ggplot2, jeśli istnieje w twojej bibliotece lub jeśli twoja biblioteka ma elektroniczny dostęp do książek Springer (myślę, że większość książek R jest tam).
Matt Parker,
Tak ... szczególnie używam alphaw wykresach rozrzutu, aby uniknąć nadplotu.
aL3xa
@ aL3xa Możesz użyć alpha w podstawowym pakiecie graficznym. Wystarczy dodać na przykład col = rgb(0, 0, 0, 0.6)opcje działki.
RobJan