gpt4 book ai didi

r - ggplot2 - 轴美学

转载 作者:行者123 更新时间:2023-12-04 17:57:27 26 4
gpt4 key购买 nike

可以在 ggplot2绘制与来自 X 和 Y 的值的百分比相关的第二个“轴”标签。

enter image description here

编辑:

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

V1   V2
0 0
0.03 0.0005
0.10 0.0015
0.13 0.0020
....
1 1

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

最佳答案

您可以使用 ggplot2 轻松地逐层构建此图(使用 geom_rectgeom_text )。不是一个 Shiny 的解决方案,但您可以通过以下方式获得图片:

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

df <- data.frame(A=sort(runif(20)), B=sort(runif(20)))
df <- rbind(df, c(1,1))

生成上述数据表的修改版本以绘制为“内部”轴(注意:我仅通过中位数计算两个部分):
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))

为绘制的文本生成类似的内容:
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))

最后绘制所有:
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")

哪里 geom_point指向给定的值和 geom_line连接所有(正如我在您的示例图像中看到的)。 geom_rect使用所有参数绘制灰色“内轴”和 geom_text做文本部分。您将不得不使用生成的(输入)数据帧(在上面的示例中: df_rextdf_text )以获得所需的数据。 theme_bw代表黑白主题和两个 scale_continous选项代表设置 0 和 1 之间的限制,并设置百分比 formatter .

结果是:
sample plot

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

关于r - ggplot2 - 轴美学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com