【问题标题】:Multiple scatter plots and labeling points / Melting data多个散点图和标记点/熔化数据
【发布时间】:2018-07-12 13:02:40
【问题描述】:

不幸的是,我正在为这个愚蠢的问题创建一个新帖子......

我有以下数据

Substrate observed pred.cs pred.ainslie
Alfentanil     1.60     1.9         1.50
Alprazolam     1.10     1.1         1.20
Atorvastatin     1.20     3.1         4.00
Buspirone     2.00     1.9         4.20
Cyclosporine     1.90     2.3         1.70
Felodipine     2.00     2.3         1.90
Methadone     1.10     3.1         1.20
Midazolam     1.70     1.9         1.60
Nifedipine     1.10     1.2         1.20
Nisoldipine     3.05     2.3         8.10
Sildenafil     1.20     2.0         1.10
Simvastatin     3.60     3.1         1.50
Quinidine     1.05     0.8         1.30
Tacrolimus     6.60     1.7         0.95
Triazolam     2.00     1.7         1.50

我想绘制一个散点图,其中 x 轴是观察值,Y 值是 pred.cs 和 pred.ainslie

我知道一个合理的做法是以一种可以由 ggplot 处理的方式融化数据框,但我不知道如何......

理想情况下,它应该类似于 https://i.stack.imgur.com/9udmg.jpg 其中有围绕数据点的置信区间和位于外部的指示(通过它们的 Substrate 名称)。

如果有一种方法可以根据它们来自哪个列来为点着色,那就太好了,即 pred.cs 说黑色和 pred.ainslie 是白色

对不起,如果这真的很基础,但过去 2 小时我一直在努力,没有任何进展!

谢谢

编辑

感谢所有回答的人,非常感谢您的回答。

我现在已经达到了这一点(使用提供的帮助和代码):

data %>% 
  gather(val.type, value, pred.cs:pred.ainslie) %>% 
  ggplot(aes(x = observed, y = value, shape = val.type, color = "black")) + 
  geom_point(size = 3, color = "black", shape = c(rep(1,15),rep(19,15))) +
  geom_abline(intercept= 0, slope =1)+
  geom_abline(intercept= 0, slope = 0.75, linetype= "dashed")+
  geom_abline(intercept= 0, slope = 1.25, linetype= "dashed")+
  scale_shape_manual(name = "Study", values = c(pred.cs = 1, 
    red.ainslie=21))+
  theme( axis.line = element_line(colour = "black", size = 0.2, linetype= 
    "solid")) +
  scale_x_continuous(expand = c(0,0),limits = c(0,10)) +
  scale_y_continuous(expand = c(0,0),limits = c(0,10))

制作这个:https://i.stack.imgur.com/DkXmY.png

现在的问题变成了......有没有办法标记位于我创建的线锥之外的点?理想情况下,它将是一个黑色箭头,指向带有其 Sustrate 标识符的点

再次感谢您!

【问题讨论】:

  • 干杯,我可以从中提取一些信息,即您可以将 geom_point 链接在一起 ggplot(data, aes(observed))+ geom_point(aes(y = pred.cs), color = "black", size= 1) + geom_point(aes(y = pred.ainslie), color = "red", size= 1) geom_smooth 不再有效,因为(我猜)x,y 没有配对

标签: r plot ggplot2 scatter


【解决方案1】:

您可以使用dplyrggplot2 的组合。整理数据:

dat %>% 
gather(val.type, value, pred.cs:pred.ainslie) %>% 
ggplot(aes(x = observed, y = value, shape = val.type, color = Substrate)) + 
geom_point()

我认为这就是你的意思。

【讨论】:

  • 感谢您的贡献!您的收集步骤使现在可以工作。我仍然需要改变很多东西,但至少我现在可以继续!
  • 不是基于 Substrate 着色,我现在如何根据它是 pred.cs 还是 pred.ainslie 着色?我认为如果我们以这种方式合并,我们现在会丢失信息,谢谢
  • 切换 color = Substratecolor = val.type
【解决方案2】:

从你的标签问题开始:

data_label <- data %>%
gather(val.type, value, pred.cs:pred.ainslie) %>% 
mutate(label_this = ifelse(value > 1.25 * observed | value < 0.75 * observed, "YES", "NO")) %>%
filter(label_this == "YES")

data %>%
gather(val.type, value, pred.cs:pred.ainslie) %>% 
ggplot(aes(x = observed, y = value, shape = val.type, color = "black")) +
geom_point(size = 3, color = "black", shape = c(rep(1,15),rep(19,15))) +
geom_abline(intercept= 0, slope =1)+
geom_abline(intercept= 0, slope = 0.75, linetype= "dashed")+
geom_abline(intercept= 0, slope = 1.25, linetype= "dashed")+
geom_text(data = data_label, aes(x = observed, y = value, label = Substrate), nudge_y = 0.5, color = "black")+
scale_shape_manual(name = "Study", values = c(pred.cs = 1, 
red.ainslie=21))+
theme( axis.line = element_line(colour = "black", size = 0.2, linetype= "solid"),
    legend.position = "none") +
scale_x_continuous(expand = c(0,0),limits = c(0,10)) +
scale_y_continuous(expand = c(0,0),limits = c(0,10))

这会让你接近。标签是从geom_text 生成的。

输出:

您仍需要处理位置和箭头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 2012-12-21
    • 2019-09-30
    • 2017-05-12
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多