控制R散点图中的点大小?


116

在R中,该plot()函数采用一个pch参数来控制图中点的外观。我正在用数以万计的点进行散点图绘制,并且希望使用一个较小但不太小的点。基本上,我觉得pch='.'自己太小了,但又pch=19太胖了。中间是否有某种方式或某种方式可以按比例缩小点数?


除了使点变小之外,还有一种方法可以绘制出100个随机数据点而不是1000个点呢?
user2363642 2014年

对于许多小点,使用Alpha(透明度)可以使散点图的信息量大大超过仅使用较少点进行散点图的程度。

1
我建议不要使用pch='.',它将偏离中心。资料来源:我曾经pch='.'经常使用
祖母版

@geneorama你的意思是使用·代替.吗?
nanaki

@nanaki或多或少,但是奇怪的是,当我在R中使用它时,您的符号会显示为小方框。下面的答案可以很好地说明正确的方法。
日内瓦19:05

Answers:


100

尝试cex参数:

?par

  • cex
    一个数值,给出了相对于默认值放大文字和符号的数量。请注意,某些图形函数(例如plot.default)具有此名称的参数,该参数会乘以该图形参数,而某些函数(例如点)则接受可循环使用的值向量。如果提供的向量长度大于1,则其他用途将仅取第一个值。

15
我认为除非没有其他选择,否则我永远不会使用“ cex”来控制符号大小。它仅在某些时间有效;规则是,当通过“ par”设置“ cex”时,它会影响绘图上(大多数)文本的大小;在“ plot”中进行设置时,“ cex”仅影响符号大小。因此,如果您错误地应用了该规则,那么不仅符号大小没有更改,而且现在您有多个影响文本大小的参数(cex.axis,cex.lab,cex.main和cex.sub都一样)作为“ cex”工作,只能是分段的)。这样的代码很难维护和扩展。
doug 2010年

5
同意。cex通过par更改全局设置可以更改所有必须纠正的内容,包括图形边距。但是,cex内部设置plot似乎可行。
飞行

道格的评论在上面所拥护的建议不一定是错误的,但确实cex在绘图时夸大了使用该参数的任何潜在问题。在很多情况下,它既有用又是最佳选择。
joran 18-10-16

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

1
关于如何使用它在同一张图上绘制多个序列的任何想法吗?即“点(x = dfx2 $ ev1,y = dfx2 $ ev2,圆圈= dfx2 $ ev3,...)”不起作用。
Neodyme,2015年

如果您想知道“英寸是多少?” 看到这里
MichaelChirico

22

rcs所述,cex将在基本图形包中完成这项工作。我认为您不愿意在其中进行图形绘制,ggplot2但是如果您这样做,则存在一种size美学属性,您可以轻松控制(ggplot2具有用户友好的函数参数:无需键入cex(字符扩展),而ggplot2可以键入eg size = 2和您将获得2mm的点数)。

例子如下:

### 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有几种使它看起来不错的替代方法-alpha调整,十六进制bin,等高线图等。请查看ggplot2书的第72-77页,如果有的话在您的图书馆中,或者您的图书馆可以通过电子方式访问Springer图书(我认为其中有很多R图书)。
马特·帕克

是的...我特别alpha在散点图中使用,以避免过度绘图。
aL3xa 2010年

@ aL3xa可以在基本图形包中使用alpha。只需col = rgb(0, 0, 0, 0.6)在绘图选项中添加例如。
RobJan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.