如何单独设置填充不透明度以在ggplot geompoint中勾画出轮廓不透明度?

问题描述 投票:0回答:1

我正在使用 ggplot2 创建散点图,我希望我的点具有实线外线和部分不透明的填充。使用形状为 21 的 geom_point,我可以将轮廓设置为与填充不同的颜色,但我不知道如何独立于轮廓设置填充的不透明度。这是我的代码:

  p <- ggplot(
    data=raw_data, 
    aes(
      x=acq_time, 
      y=rt,
      size=area,
      color=compound,
      text=paste(compound,
                 paste(arl_no, " - ", sample_name),
                 paste("Acq. method =", acq_meth),
                 paste("Processing method =", proc_meth),
                 paste("RT =", rt, "  Peak area =", area, "  Area percent =", area_percent),
                 path,
                 sep="\n"))) +
    geom_point(shape=21, aes(fill=compound, alpha=0.3)) +
    labs(title = "Compound retention times")

  p_interactive<-ggplotly(p, tooltip="text")
  p_interactive

这是一些示例数据:

    > dput(sample_data)
structure(list(peak = c(29L, 13L, 13L, 27L, 52L, 6L, 110L, 121L, 
2L, 16L, 15L, 4L, 11L, 12L, 3L, 27L, 12L, 14L, 7L, 4L, 20L, 14L, 
5L, 16L, 22L, 21L), rt = c(12.555, 10.794, 10.719, 12.818, 17.313, 
9.287, 19.816, 19.697, 7.769, 10.913, 10.569, 9.067, 10.159, 
10.909, 7.982, 12.979, 10.359, 10.573, 9.919, 7.771, 11.783, 
10.572, 9.4, 10.573, 9.952, 11.8), type = c("VV", "VB", "BV", 
"VV", "VB", "VB", "VV", "VV", "BB", "VB", "VV", "BV", "VV", "VB", 
"BB", "VB", "VV", "VV", "BV", "VB", "VV", "VV", "VV", "VB", "VV", 
"VB"), width = c(0.0215, 0.0228, 0.0208, 0.0237, 0.0239, 0.0227, 
0.0255, 0.032, 0.0265, 0.0224, 0.0241, 0.0237, 0.0225, 0.023, 
0.0284, 0.023, 0.021, 0.0244, 0.0212, 0.0268, 0.0217, 0.0248, 
0.0242, 0.0247, 0.0228, 0.0231), area = c(70.51088, 207.4633, 
154.9167, 26.83362, 199.3089, 65.4397, 11.2647, 50.90956, 71.16205, 
992.8403, 160.18407, 31.15576, 73.49612, 1487.48621, 123.06009, 
40.85532, 119.6302, 190.15558, 38.30812, 2.57459, 5.102, 281.16638, 
55.96363, 297.8779, 492.08939, 6.97452), area_percent = c(0.4212, 
2.6688, 1.9341, 0.2938, 2.6138, 0.7597, 0.1401, 0.3254, 0.7343, 
11.0654, 2.0277, 0.33, 0.9087, 20.10661, 1.5192, 0.2705, 0.7815, 
2.1007, 0.4619, 0.0305, 0.0648, 2.9014, 0.6735, 1.8652, 5.8267, 
0.0696), compound = c("cis-p-menth-2-en-1-ol", "1,8-cineole", 
"p-cymene", "trans-p-menth-2-en-1-ol", "aromadendrene", "myrcene", 
"viridiflorol", "globulol", "a-thujene", "g-terpinene", "1,8-cineole", 
"sabinene", "limonene", "g-terpinene", "a-pinene", "trans-p-menth-2-en-1-ol", 
"limonene", "1,8-cineole", "a-phellandrene", "a-thujene", "linalool", 
"1,8-cineole", "b-pinene", "1,8-cineole", "a-terpinene", "linalool"
), total_peak_area = c(16739, 7773.547, 8009.608, 9133.66006, 
7625.237, 8613.372, 8039.38068, 15647.1, 9690.86738, 8972.451, 
7899.82093, 9440.86063, 8088.34658, 7085.32236, 8100.07186, 15103.2, 
15307.2, 9051.95117, 8293.793, 8445.46604, 7873.55789, 9690.86738, 
8308.918, 15970.3, 8445.46604, 10024.4), arl_no = c("QSR0047-2_1", 
"ARL2306177", "ARL2306124", "REFTTO-230301_1", "ARL2305596", 
"QSR0047-230508_2", "REFTTO-230203_2", "ARL2104967_QSR_CANDIDATE_1", 
"ARL2300833", "QSR0047-230525_2", "REFTTO-230118_2", "REFTTO-230314_1", 
"ARL2300523", "ARL2300053", "REFTTO-230202_2", "QSR0047-2_2", 
"QSR0047-2_2", "REFTTO-230308_1", "QSR0047-2_1", "ARL2300518", 
"REFTTO-230116_2", "ARL2300833", "QSR0047-2_2", "ARL2104967_QSR_CANDIDATE_2", 
"ARL2300518", "QSR0047_1"), sample_name = c("a", "b", "c", "d", 
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", 
"r", "s", "t", "u", "v", "w", "x", "y", "z"), acq_time = structure(c(19593, 
19585, 19585, 19417, 19564, 19485, 19391, 19464, 19397, 19502, 
19375, 19430, 19387, 19362, 19390, 19583, 19584, 19424, 19565, 
19387, 19373, 19397, 19565, 19440, 19387, 19541), class = "Date"), 
    acq_meth = c("EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", 
    "EO BASEMETHOD 2020", "EO BASEMETHOD 2020", "EO BASEMETHOD 2020"
    ), proc_meth = c("TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", 
    "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", 
    "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", 
    "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO.M", "TTO LATE FRACTION SCB.M"
    ), gc = c("GC-3", "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", 
    "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", 
    "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", "GC-3", 
    "GC-3", "GC-3", "GC-3", "GC-3"), path = c("A", "B", "C", 
    "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", 
    "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")), row.names = c(28411L, 
28045L, 27962L, 7910L, 25994L, 11854L, 5880L, 10612L, 6691L, 
14799L, 1626L, 8904L, 4163L, 171L, 5135L, 27743L, 27885L, 8465L, 
26208L, 4031L, 1470L, 6701L, 26231L, 9626L, 4037L, 19499L), class = "data.frame")

请注意,plot_ly 默认情况下会创建我正在寻找的效果类型,但我将 ggplot 与 ggplotly 一起使用,因为 ggplot 似乎为我在悬停文本中包含的内容提供了更大的灵活性。但这里有一个plot_ly 方法,至少显示了我想要的外观类型:

fig <- plot_ly(type="scatter", mode="markers", sizes=c(20,1000),alpha=0.3)
  fig <- fig %>%
    add_trace(data=raw_data,
              x=~acq_time, 
              y = ~rt, 
              size=~area,
              color=~compound, 
              text=~compound,
              hovertemplate=paste("<b>%{text}</b>",
                                  '<br>RT = %{y}',
                                  '<br>Date = %{x}')) %>%
    layout(title="Compound retention times")
    fig
r ggplot2 fill
1个回答
0
投票

color
美学映射到
compound
,并将填充美学设置为
after_scale(alpha(color, 0.2)))

ggplot(raw_data, aes(acq_time, rt, size = area, color = compound)) +
  geom_point(aes(fill = after_scale(alpha(color, 0.2))), shape = 21) +
  labs(title = "Compound retention times") +
  theme_minimal()

© www.soinside.com 2019 - 2024. All rights reserved.