亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎么在ggplot 2中在各個方面注釋文本

怎么在ggplot 2中在各個方面注釋文本

Go
人到中年有點甜 2019-10-20 16:12:29
在ggplot 2中在各個方面注釋我想用以下代碼對情節的最后一個方面進行注釋:library(ggplot2)p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()p <- p + facet_grid(. ~ cyl)p <- p + annotate("text", label = "Test", size = 4, x = 15, y = 5)print(p)但這段代碼在每個方面都對文本進行了注釋。如果你能指導我如何只從一個方面得到注釋的文本,我將不勝感激。提前謝謝。
查看完整描述

3 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

通常你會這樣做:

ann_text <- data.frame(mpg = 15,wt = 5,lab = "Text",
                       cyl = factor(8,levels = c("4","6","8")))p + geom_text(data = ann_text,label = "Text")

它應該在不完全指定因子變量的情況下工作,但可能會引發一些警告



查看完整回答
反對 回復 2019-10-21
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

下面是沒有文本注釋的情節:

library(ggplot2)p <- ggplot(mtcars, aes(mpg, wt)) +
  geom_point() +
  facet_grid(. ~ cyl) +
  theme(panel.spacing = unit(1, "lines"))p

讓我們創建一個額外的數據框架來保存文本注釋:

dat_text <- data.frame(
  label = c("4 cylinders", "6 cylinders", "8 cylinders"),
  cyl   = c(4, 6, 8))p + geom_text(
  data    = dat_text,
  mapping = aes(x = -Inf, y = -Inf, label = label),
  hjust   = -0.1,
  vjust   = -1)

或者,我們可以手動指定每個標簽的位置:

dat_text <- data.frame(
  label = c("4 cylinders", "6 cylinders", "8 cylinders"),
  cyl   = c(4, 6, 8),
  x     = c(20, 27.5, 25),
  y     = c(4, 4, 4.5))p + geom_text(
  data    = dat_text,
  mapping = aes(x = x, y = y, label = label))

我們還可以將情節分為兩個方面:

dat_text <- data.frame(
  cyl   = c(4, 6, 8, 4, 6, 8),
  am    = c(0, 0, 0, 1, 1, 1))dat_text$label <- sprintf(
  "%s, %s cylinders",
  ifelse(dat_text$am == 0, "automatic", "manual"),
  dat_text$cyl)p +
  facet_grid(am ~ cyl) +
  geom_text(
    size    = 5,
    data    = dat_text,
    mapping = aes(x = Inf, y = Inf, label = label),
    hjust   = 1.05,
    vjust   = 1.5
  )

注:

  • 你可以用

    -Inf

    Inf

    若要將文本定位到面板的邊緣,請執行以下操作。
  • 你可以用

    hjust

    vjust

    若要調整文本的合理性,請執行以下操作。
  • 文本標簽數據框架

    dat_text

    應該有一個與您的

    facet_grid()

    facet_wrap().



查看完整回答
反對 回復 2019-10-21
?
烙印99

TA貢獻1829條經驗 獲得超13個贊


我認為上面的答案=“文本”是無用的,下面的代碼也沒問題。

ann_text <- data.frame(mpg = 15,wt = 5,
                       cyl = factor(8,levels = c("4","6","8")))p + geom_text(data = ann_text,label = "Text" )

但是,如果您想在不同的子圖中進行不同的標記,可以這樣做:

ann_text <- data.frame(mpg = c(14,15),wt = c(4,5),lab=c("text1","text2"),
                       cyl = factor(c(6,8),levels = c("4","6","8")))p + geom_text(data = ann_text,aes(label =lab) )



查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 724 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號