相当于rpy2中的scale_size_area用于Python中的ggplot2?

时间:2013-04-18 18:27:14

标签: python ggplot2 rpy2

rpy2与ggplot2的等效值是scale_size_area()吗?如果没有,我怎么写呢? 我指的是这个功能:

http://docs.ggplot2.org/0.9.3/scale_size_area.html

我想根据面积按尺寸缩放点,而不是我认为默认的半径。

1 个答案:

答案 0 :(得分:2)

不,rpy2没有此功能,因为ggplot2包装器模块实际上是手工编码的。 (希望,正如作者所说,元编程将最终用于使代码更短更自动。)然而,好消息是添加自己的功能并不困难。以下是将scale_size_area()添加到现有功能的方法:

import rpy2.robjects.lib.ggplot2 as ggplot2
import rpy2.robjects as ro

mtcars = ro.r('mtcars')
gp = ggplot2.ggplot(mtcars)
pp = gp + ggplot2.aes_string(x='wt', y='mpg', size='cyl') + ggplot2.geom_point()

# using the standard size (radius) aesthetic for size
pp.plot()

# create the ScaleSizeArea (based on ggplot2.py in rpy2)
class ScaleSizeArea(ggplot2.ScaleSize):
    _constructor = ggplot2.ggplot2_env['scale_size_area']

ggplot2.scale_size_area = ScaleSizeArea.new

# now you can use scale_size_area instead!
pp_area = pp + ggplot2.scale_size_area()
pp_area.plot()