lus*_*ser 3 plot r histogram scatter-plot ggplot2
我正在尝试创建一个带有边际直方图的散点图,如这个问题。我的数据是两个(数字)变量,它们共享七个离散(某种程度上)对数间隔的水平。
ggMarginal我已经在包中的帮助下成功完成了此操作ggExtra,但是我对结果不满意,因为当使用与散点图相同的数据绘制边际直方图时,事情并不一致。如下所示,直方图条稍微偏向数据点本身的右侧或左侧。
library(ggMarginal)
library(ggplot2)
x <- rep(log10(c(1,2,3,4,5,6,7)), times=c(3,7,12,18,12,7,3))
y <- rep(log10(c(1,2,3,4,5,6,7)), times=c(3,1,13,28,13,1,3))
d <- data.frame("x" = x,"y" = y)
p1 <- ggMarginal(ggplot(d, aes(x,y)) + geom_point() + theme_bw(), type = "histogram")
Run Code Online (Sandbox Code Playgroud)
一个可能的解决方案是将直方图中使用的变量更改为因子,以便它们与散点图轴很好地对齐。使用以下命令创建直方图时效果很好ggplot:
p2 <- ggplot(data.frame(lapply(d, as.factor)), aes(x = x)) + geom_histogram()
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用 执行此操作时ggMarginal,我没有得到所需的结果 -ggMarginal直方图似乎仍然将我的变量视为数字。
p3 <- ggMarginal(ggplot(d, aes(x,y)) + geom_point() + theme_bw(),
x = as.factor(x), y = as.factor(y), type = "histogram")
Run Code Online (Sandbox Code Playgroud)
如何确保我的直方图条形图位于数据点的中心?
我绝对愿意接受不涉及使用的答案ggMarginal。
不确定在这里复制我对您提到的问题给出的答案是否是一个好主意,但我仍然无权发表评论,否则请告诉我。
\n\n我发现包 ( ggpubr) 似乎非常适合解决这个问题,并且它考虑了显示数据的几种可能性。
该包的链接位于此处,在此链接中您将找到一个很好的使用教程。为了完整起见,我附上了我复制的示例之一。
\n\n我首先安装了该软件包(它需要devtools)
if(!require(devtools)) install.packages("devtools")\ndevtools::install_github("kassambara/ggpubr")\nRun Code Online (Sandbox Code Playgroud)\n\n对于为不同组显示不同直方图的特定示例,它提到ggExtra:“的一个限制ggExtra是它不能\xe2\x80\x99t处理散点图和边缘图中的多个组。在下面的R代码中,我们使用该cowplot包提供了一个解决方案。” 就我而言,我必须安装后一个软件包:
install.packages("cowplot")\nRun Code Online (Sandbox Code Playgroud)\n\n我遵循了这段代码:
\n\n# Scatter plot colored by groups ("Species")\nsp <- ggscatter(iris, x = "Sepal.Length", y = "Sepal.Width",\n color = "Species", palette = "jco",\n size = 3, alpha = 0.6)+\nborder() \n# Marginal density plot of x (top panel) and y (right panel)\nxplot <- ggdensity(iris, "Sepal.Length", fill = "Species",\n palette = "jco")\nyplot <- ggdensity(iris, "Sepal.Width", fill = "Species", \n palette = "jco")+\nrotate()\n# Cleaning the plots\nsp <- sp + rremove("legend")\nyplot <- yplot + clean_theme() + rremove("legend") \nxplot <- xplot + clean_theme() + rremove("legend")\n# Arranging the plot using cowplot\nlibrary(cowplot)\nplot_grid(xplot, NULL, sp, yplot, ncol = 2, align = "hv", \n rel_widths = c(2, 1), rel_heights = c(1, 2))\nRun Code Online (Sandbox Code Playgroud)\n\n这对我来说效果很好:
\n\n\n