ggplot2 - 轴美学

Bar*_*ata 5 r ggplot2

可以ggplot2绘制第二个"轴"标签,将X和Y值的百分比相关联.

在此输入图像描述

编辑:

我有一个data.frame有两个vars,相关和百分比.我想展示与V2相关的V1的演变; 例如,我需要多少百分比的V2才能获得20%的V1(反之亦然).

V1   V2
0    0
0.03 0.0005
0.10 0.0015
0.13 0.0020
....
1    1
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如何在X和Y上做那个内轴,显示X和Y百分比之间的关系.另外我如何设置ggplot使用(0,0)作为x轴和y轴的截距?

dar*_*zig 8

您可以使用ggplot2轻松地从一层到另一层(使用geom_rectgeom_text)构建此图形.不是一个有光泽的解决方案,但你可以通过以下方式得到图

生成一些要在绘图上使用的数据:

df <- data.frame(A=sort(runif(20)), B=sort(runif(20)))
df <- rbind(df, c(1,1))
Run Code Online (Sandbox Code Playgroud)

生成上述数据表的修改版本以绘制为"内部"轴(注意:我只按中位数计算两个部分):

df_rect <- data.frame(xmin=c(0, median(df$A), -0.01, -0.01), xmax=c(median(df$A), 1, 0, 0), ymin=c(-0.01, -0.01, 0, median(df$B)), ymax=c(0, 0, median(df$B), 1), color=grey(c(0.7, 0.2)), alpha=c(0.8, 0.4, 0.8, 0.4))
Run Code Online (Sandbox Code Playgroud)

为绘制的文本生成类似的内容:

df_text <- data.frame(x=c(median(df$A)/2, median(df$A) + (1-median(df$A))/2, 0.05, 0.05), y=c(0.02, 0.02, median(df$B)/2, median(df$B) + (1-median(df$B))/2), label=rep('50%', 4))
Run Code Online (Sandbox Code Playgroud)

最后情节全部:

ggplot(df, aes(A, B)) + geom_point() +
    geom_line() +
    geom_rect(data=df_rect, aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax, fill=color, alpha=alpha), inherit.aes = FALSE) + scale_fill_grey() +
    geom_text(data=df_text, aes(x=x, y=y, label=label), inherit.aes = FALSE) + 
    theme_bw() + scale_y_continuous(limits=c(-0.01, 1), formatter='percent') + scale_x_continuous(limits=c(-0.01, 1), formatter='percent') + opts(legend.position="none")
Run Code Online (Sandbox Code Playgroud)

geom_point分给定值和geom_line连接所有(如我在您的示例图像所看到的).geom_rect所有参数都绘制灰色的"内轴"并geom_text执行文本部分.您必须使用生成的(输入)数据帧(在上面的示例中:df_rextdf_text)来获取所需的数据.theme_bw 代表黑白主题,两个scale_continous选项代表设置0到1之间的限制,并设置百分比formatter.

结果如下: 样本图

我希望您能够根据您的需求定制和升级这个小例子!