美文网首页
104. Graphics for communication(

104. Graphics for communication(

作者: 心惊梦醒 | 来源:发表于2022-04-08 07:40 被阅读0次

Label

  为图片添加:
  标题,Title:标题的目的是总结主要的发现;
  副标题,subtitle:在标题下面以较小的字体添加额外的细节。
  图片的说明文字,caption:在图的右下角添加文本,通常用来描述数据的来源。
  x,y,color:重新设置坐标轴和图例的标题;横纵坐标的标题中最好带有单位。

ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(color = class)) +
  geom_smooth(se = FALSE) +
  labs(
    title = "Fuel efficiency generally decreases with engine size",
    subtitle = "Two seaters (sports cars) are an exception because of their light weight",
    caption = "Data from fueleconomy.gov",
    x = "Engine displacement (L)",
    y = "Highway fuel economy (mpg)",
    colour = "Car type"
  )

注释

不那么智能的工具geom_text()和geom_label()

  除了标注图片的主要部分,标注单个或一组观测值有时会很有用。
  文本标记对于标记图形很有用,它们本身可以用作散点图(geom_text()和散点图很相似,但有一个额外的美学属性:label),也可以与其他几何对象结合使用,例如,给points打标签或标注bars的高度。geom_text()只向图形添加文本,geom_label()在文本后面绘制一个矩形,使其更易于阅读。

函数1 函数2
仅向图形中添加文本,check_overlap=TRUE可以不在同一位置绘制多个文本 在文本后绘制一个矩形,可以设置矩形的属性。没有check_overlap功能,也就是会绘制所有标签。没有angle美学属性,且比geom_text()慢。fill美学属性可以填充label的背景颜色。

  1)parse:如果为TRUE,labels将被解析成表达式,并如?plotmath所描述的那样展示。
  2)nudge_x,nudge_y:“nudge”,轻推。在水平和垂直方向上轻推标签的位置,位移text远离point时很有用,特别在离散尺度上,不能和position一起指定。
  3)label.padding:labels周围的填充量,默认0.25 lines
  4)label.r:圆角半径,默认0.15 lines
  5)label.size:label边框大小,默认0.25,单位为mm
  6)show.legend:图例中是否应该包含本layer的信息?NA表示有美学映射时展示,没有就不展示;FALSE表示总是不展示;TRUE表示总是展示;也可以是一个named logical vector用来选择性展示美学属性。
  7)check_overlap:如果为TRUE,与同一个layer中之前的文本有重叠的text将不在图片上画了。check_overlap发生在绘制时间且按data中出现的顺序,所以在调用geom_text()之前应该将data按照标签列进行排序
  图中,a text element的 height 和 width 是0,你看到的是 physical unites 而不是 data units。所以即使图片的大小更改,text labels 仍然是相同的大小,也因此你可能会看到一些图中text labels跑到了整个绘图区域之外,因为 axis limits 不会自动延伸以包含所有的 text label。
  以上两个函数为data中的每一行添加标签,如果需要给特定的点添加label,可以用annotate()
  所以到现在你应该明白,在给图添加标签之前你需要准备label data,这个label data可以是你绘图数据中的一个子集。

# 准备label data:每种车型中最高效的车。
# row_number()等于rank(,ties.method="first")
best_in_class <- mpg %>%
  group_by(class) %>%
  filter(row_number(desc(hwy)) == 1)
# 用geom_text()为对应的点添加labels,但labels之间、labels和points之间互相重叠导致图片可读性差
ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(colour = class)) +
  geom_text(aes(label = model), data = best_in_class)
# 可用geom_label()将label用方框标出来,再用nudge将label拉离point一点点
ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(colour = class)) +
  geom_label(aes(label = model), data = best_in_class, nudge_y = 2, alpha = 0.5)

  美学属性hjustvjust用来控制label的对齐方式,即point相对于label的位置,所有组合如下:

来自R data for science
  hjustvjust的值可以是 ("left", "middle", "right", "bottom", "center", "top"),也可以用0表示right/bottom,1表示top/left。"inward" 总是将文本向中心对齐, "outward"总是将文本向远离中心的方向对齐(这里的中心可以理解为图片的中心):
df <- data.frame(
  x = c(1, 1, 2, 2, 1.5),
  y = c(1, 2, 1, 2, 1.5),
  text = c("bottom-left", "bottom-right", "top-left", "top-right", "center")
)
ggplot(df, aes(x, y)) +
  geom_text(aes(label = text))
ggplot(df, aes(x, y)) +
  geom_text(aes(label = text), vjust = "inward", hjust = "inward")
“inward”和“outward”,左图的正确标题应该是“set hjust and vjust without inward”,右图的正确标题应该是“set hjust and vjust with inward”。

自动定位不重叠的text labels的工具ggrepel包

  以上两个工具不能解决labels互相重叠的问题,ggrepel包可以解决,这个包里包括两个函数:geom_text_repel()geom_label_repel(),可以使labels互相远离、labels远离data points、labels远离绘图区域的边缘

ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(colour = class)) +
  geom_point(size = 3, shape = 1, data = best_in_class) +
  ggrepel::geom_label_repel(aes(label = model), data = best_in_class)

  几个小例子:
  1)用labels代替legend直接放在图片里:首先确定labels的位置,可以是median(每种class),另外需关闭图例:theme(legend.position = "none")。
  2)将一个label放在图片的角落:label data需要放在数据框里。
  2)将一个label放在图片的边缘:将label的坐标设置为Inf

其他帮助注释图片的工具

  1)geom_hline()geom_vline()为图片添加参考线,推荐设置:厚度(size=2);颜色(color=white);画在原始数据层的下面,目的是不会喧宾夺主。
  2)geom_rect()在感兴趣的点周围画方框,方框的边界用xminxmaxyminymax
  3)geom_segment(),设置arrow参数画一个箭头指向一个点,用xyxendyend定义箭头的开始和结束位置。

相关文章

  • 104. Graphics for communication(

    Label   为图片添加:  标题,Title:标题的目的是总结主要的发现;  副标题,subtitle:在标题...

  • 105. Graphics for communication(

    Scale   scales控制数据值到你所能感知到的东西的映射,正常情况下,ggplot2为你自动加上scale...

  • 106. Graphics for communication(

    缩放,zooming   三种方法控制plot limits:1)调整绘图数据;2)设置每个scale的limit...

  • 107. Graphics for communication(

    图片保存   两种主要的方法将图片从R中导出:ggsave()和knitr。ggsave()将最近的图片保存到磁盘...

  • 109. Graphics for communication练

    28.4.4练习题   105. Graphics for communication(2)[https://ww...

  • 108. Graphics for communication练

    28.2.1练习题 通过labs()函数可以一键设置标题、副标题、字幕(说明性文字)、轴标题和图例标题。我之前比较...

  • Leetcode PHP题解--D41 104. Maximum

    104. Maximum Depth of Binary Tree 题目链接 104. Maximum Depth...

  • Communication

    Communication The Cardigans For twenty-seven years I've b...

  • Communication

    世界吻你以痛 世界爱你以悲 世界只是想让你知道更多 怕温柔过了头你忘记生存 情绪总是最难以捉摸的东西 有些时候它像...

  • Communication

    大雨无情的砸到莎乐美的身上,她血水浓重的全身伤痕累累,刀切开的伤口滚着红里泛白的肉,利落整齐的伤口大小不一的遍布...

网友评论

      本文标题:104. Graphics for communication(

      本文链接:https://www.haomeiwen.com/subject/kkocsrtx.html