0

我将总结之前在这个论坛中提出的一些问题(1、2 ,但在这种情况下,我将使用我的真实数据集和代码,全部放在一起。我被卡住了,需要帮助才能正确编码。

让我们从数据集开始。从这里下载并加载它们:

perio <- read.csv(url("http://vivaelsoftwarelibre.com/wp-content/uploads/2018/05/perio.csv"), header = TRUE, sep = ",", quote = "\"", dec = ".")
pk    <- read.csv(url("http://vivaelsoftwarelibre.com/wp-content/uploads/2018/05/pk.csv"),    header = TRUE, sep = ",", quote = "\"", dec = ".")

如您所见,我们有两个不同的数据集。

现在,我将计算 A 组和 B 组pk以及 A组和 B 组的置信限 (CL) perio,之前已经计算了每组的均值、标准差和长度。

# Calculate mean, sd and length in pk by Comparison
mean_pk   <- aggregate(pk[, 1], list(Type=pk$Comparison), mean)
sd_pk     <- aggregate(pk[, 1], list(Type=pk$Comparison), sd)
length_pk <- aggregate(pk[, 1], list(Type=pk$Comparison), length)

# 95 confidence limits of pk by Comparison (A and B)
CL_A_pk <- qnorm(0.975)*sd_pk[1,2]/sqrt(length_pk[1,2])
CL_A_pk_lw <- mean_pk[1,2] - CL_A_pk
CL_A_pk_up <- mean_pk[1,2] + CL_A_pk

CL_B_pk <- qnorm(0.975)*sd_pk[2,2]/sqrt(length_pk[2,2])
CL_B_pk_lw <- mean_pk[2,2] - CL_B_pk
CL_B_pk_up <- mean_pk[2,2] + CL_B_pk

# Calculate mean, sd and length in perio by Site
mean_perio <- aggregate(perio[, 2], list(Type=perio$Site), mean)
sd_perio <- aggregate(perio[, 2], list(Type=perio$Site), sd)
length_perio <- aggregate(perio[, 2], list(Type=perio$Site), length)

# 95 confidence limits of pk by Site (A and B)
CL_A_perio <- qnorm(0.975)*sd_perio[1,2]/sqrt(length_perio[1,2])
CL_A_perio_lw <- mean_perio[1,2] - CL_A_perio
CL_A_perio_up <- mean_perio[1,2] + CL_A_perio

CL_B_perio <- qnorm(0.975)*sd_perio[2,2]/sqrt(length_perio[2,2])
CL_B_perio_lw <- mean_perio[2,2] - CL_B_perio
CL_B_perio_up <- mean_perio[2,2] + CL_B_perio

现在,我用直方图、密度和 geom_rects 对象分别对它们进行 ggplot,同时考虑到组(A,B)

# ggplot histogram of pk
library(ggplot2)
dif_pk <- ggplot(pk, aes(x=Count, color=Comparison, fill=Comparison)) + 
  geom_density(alpha=0.25) + 
  geom_histogram(aes(y=..density..), alpha=0.25) + 
  geom_rect(aes(xmin=CL_A_pk_lw, xmax=CL_A_pk_up, ymin=0, ymax=0.3), alpha = 0.5, colour = "darkred", fill = "red") +
  geom_rect(aes(xmin=CL_B_pk_lw, xmax=CL_B_pk_up, ymin=0, ymax=0.3), colour = "darkblue", fill = "blue", alpha = 0.5) +
  geom_vline(aes(xintercept=0), lwd=0.5, lty=2) + 
  theme_minimal() + 
  theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black")) +
  lims(x=c(-50, 50), y=c(0,0.3))

# ggplot histogram of perio
library(ggplot2)
dif_perio <- ggplot(perio, aes(x=vsSAP, color=Site, fill=Site)) + 
  geom_density(alpha=0.25, kernel = "gaussian", adjust = 2) + 
  geom_histogram(aes(y=..density..), alpha=0.25) + 
  geom_rect(aes(xmin=CL_A_perio_lw, xmax=CL_A_perio_up, ymin=0, ymax=2, alpha=0.5), colour = "darkblue", fill = "blue", alpha =0.5) +
  geom_rect(aes(xmin=CL_B_perio_lw, xmax=CL_B_perio_up, ymin=0, ymax=2, alpha=0.5), colour = "darkred", fill = "red", alpha =0.5) +
  geom_vline(aes(xintercept=0), lwd=0.5, lty=2) + 
  theme_minimal() +
  theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black")) +
  scale_x_continuous(position = "top", limits = c(-75, 20)) +
  scale_y_reverse(position = "right",limits = c(2,0)) +
  coord_flip()

这些是结果: 在此处输入图像描述 在此处输入图像描述

现在,我正在使用它们合并它们cowplot

library(cowplot)
ggdraw(dif_pk) +
  draw_plot(dif_perio)

有了这个结果: 在此处输入图像描述

我想要什么?

记住最后一张图片,我需要纠正几个问题才能获得完美的情节:

  • 使用 完美对齐两个图的轴cowplot。您可以在左上角和右下角看到轴是如何错位的。所以我希望它们形成一个完整且统一的矩形。
  • 我想表示 95 个置信限,但只显示两个图的重叠区域。因此,只有两个重叠的矩形可能出现在图表的大致中心,一个用于 A 组,一个用于 B 组。垂直和水平条必须消失。
  • 我希望以前的矩形是alpha = .5,以便两者之间的重叠区域很明显。
  • 前面的每个矩形都必须保留每个组的颜色:A(红色)和 B(蓝色)。
  • 我想删除一个图例并替换另一个图例以便于解释。

矩形应该类似于使用 Inkscape 手动完成的矩形:

在此处输入图像描述

我衷心感谢您的帮助。希望R编码专家帮助我!

4

0 回答 0