【问题标题】:Arrowhead used as a size aesthetic in ggplot2箭头在 ggplot2 中用作尺寸美学
【发布时间】:2019-01-24 12:19:08
【问题描述】:

我有包含矢量坐标及其特征的数据 - success_rateprop

ex_data <- structure(list(group = c("group A", "group A", "group A", "group A", 
"group A", "group A", "group C", "group C", "group C", "group C", 
"group C", "group W", "group W", "group W", "group W", "group W"
), category = c(5, 4, 3, 2, 1, 6, 5, 1, 2, 3, 4, 1, 4, 5, 2, 
3), success_rate = c(0.816037735849057, 0.938775510204082, 0.653061224489796, 
0.985915492957746, 0.934306569343066, 1, 0.979166666666667, 0.887323943661972, 
0.319587628865979, 0.721590909090909, 0.941176470588235, 0.689320388349515, 
0.338028169014085, 0.396551724137931, 0.7375, 0.763948497854077
), x0 = c(24.5, 24.5, 23.7, 22.6, 28.6, 27.6, 27.2, 27.4, 15.7, 
25.5, 24.2, 21.4, 17.5, 9.9, 23.6, 29), y0 = c(21.2, 27.9, 96.6, 
43.9, 65.1, 71.5, 34.3, 71.2, 47.9, 88, 36, 86.9, 49.4, 41.3, 
85.6, 16.7), x1 = c(35.2, 36.5, 34, 32.9, 39.4, 40.2, 35.9, 31.6, 
63.1, 29.5, 35.9, 35.4, 61.4, 54, 37.3, 37.2), y1 = c(5.8, 33.6, 
96.8, 70, 64.8, 96.6, 7.3, 64.9, 63.1, 89.7, 38.5, 95, 59.3, 
32.2, 77.9, 12), prop = c(0.124926340601061, 0.0866234531526223, 
0.0288744843842074, 0.041838538597525, 0.0807307012374779, 0.0271066588096641, 
0.0365853658536585, 0.0541158536585366, 0.0739329268292683, 0.134146341463415, 
0.0259146341463415, 0.0787461773700306, 0.108562691131498, 0.0443425076452599, 
0.0611620795107034, 0.178134556574924)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -16L))

我不想为每个group 制作矢量图形,以使用prop 作为尺寸美学。不幸的是,我不认为箭头尺寸美学效果不好,因为它调整了整个箭头的大小,这通常看起来很糟糕:

ggplot(ex_data) +
  geom_segment(aes(x = x0, y = y0, xend = x1, yend = y1, color = success_rate, size = prop),
               arrow = arrow(length = unit(0.2, "cm"), ends = 'last', type = 'closed')) +
  facet_wrap(~group) +
  scale_color_viridis_c()

所以我只想用prop 变量控制箭头的大小。不幸的是,箭头不是geom_segment 美学,控制其大小的唯一方法是为它们提供单独的矢量。它适用于单个组:

ex_data %>% 
  filter(group == 'group C') %>% 
  ggplot() +
  geom_segment(aes(x = x0, y = y0, xend = x1, yend = y1, color = success_rate),
               arrow = arrow(length = unit(filter(ex_data, group == 'group C')$prop * 3, "cm"), ends = 'last', type = 'closed')) +
  facet_wrap(~group) +
  scale_color_viridis_c()

但不是facet_wrap:

ggplot(ex_data) +
  geom_segment(aes(x = x0, y = y0, xend = x1, yend = y1, color = success_rate),
               arrow = arrow(length = unit(ex_data$prop * 3, "cm"), ends = 'last', type = 'closed')) +
  facet_wrap(~group) +
  scale_color_viridis_c()

您会注意到group C 的箭头大小不再有效(例如,上箭头应该有最大的箭头,而它有最小的箭头)。我的原始数据有更多的组,创建单独的图真的很乏味。有什么解决方法吗?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    在这种情况下(例如,123),我们可以为每个方面使用子数据帧。例如,

    ggplot(ex_data) +
      lapply(split(ex_data, ex_data$group), function(df)
      geom_segment(data = df, aes(x = x0, y = y0, xend = x1, yend = y1, color = success_rate),
                   arrow = arrow(length = unit(df$prop * 3, "cm"), ends = 'last', type = 'closed'))) +
      facet_wrap(~group) + scale_color_viridis_c()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多