gpt4 book ai didi

r - 如何在 y 轴的左侧制作 geom_text

转载 作者:行者123 更新时间:2023-12-04 09:36:08 25 4
gpt4 key购买 nike

我正在尝试制作动画来展示人均 GDP 排名前 10 的国家。我可以制作如下 gif。我想在 y 轴的左侧制作国家标签。我怎样才能做到这一点?
这是我的代码:

install.packages("ggplot2")
install.packages("data.table")
install.packages("gapminder")

library(gapminder)
library(ggplot2)
library(data.table)

gapminder10 = gapminder[,.SD[order(gdpPercap,decreasing = TRUE),][1:10],by = year]
gapminder10[, rank := 1:.N, by = year]

p <- ggplot(gapminder10) +
geom_bar(aes(x=gdpPercap, y=rank, fill = country), stat = "identity")+ # I need to use geom_bar to make the bar
geom_text(aes(x=0, y=rank, label = country), vjust = 0.2, hjust = "inward", size = 4) +
labs(x = "GDP per capita", y = "country")+
scale_y_reverse() + # reverse the y-axis
theme(legend.position="none", axis.text.y=element_blank(), axis.title.y=element_blank(),
axis.ticks=element_blank(),panel.background=element_blank())

g<-p + transition_time(year) +
labs(title = "Year: {frame_time}")

animate(g, nframes = 350,fps = 20, renderer = gifski_renderer())

enter image description here

最佳答案

通过 geom_text 贴标签在 y 轴的左侧可以这样实现:

  • 通过更改水平对齐方式将标签放在数据点的左侧 hjust = 1 .
  • 我还通过设置 x = -1000 在标签和轴之间添加了一些空间
  • 我们必须为标签添加一些空间,以便它们在到达绘图边界时不会被切割。这可以通过通过 expand 增加规模的扩展来实现。 scale_x_continuous 的论据.我将低端的扩展增加到 20%,同时在高端保持默认的 5%。
  • 最后,为了防止在设置 x = -1000 时出现负值中断在 geom_text 中,我通过 breaks = seq(0, 90000, 10000) 强制中断从 0 开始.

  • 注 1:而不是使用 scale_y_reverse我转换了 rank到一个因素并使用 forcats::fct_rev颠倒顺序。
    注 2:运行您的代码时,我在第一个数据操作步骤中遇到错误。出于这个原因,不幸的是我不熟悉 data.table,我切换到 dplyr 来准备数据集 gapminder10。此外,我减少了帧数以减少 reprex 的渲染时间。

    library(gapminder)
    library(ggplot2)
    library(gganimate)
    library(dplyr)
    library(forcats)

    gapminder10 <- gapminder %>%
    group_by(year) %>%
    top_n(10, gdpPercap) %>%
    arrange(year, desc(gdpPercap)) %>%
    mutate(rank = row_number(),
    rank = fct_rev(factor(rank))) %>%
    ungroup()

    p <- gapminder10 %>%
    ggplot() +
    geom_bar(aes(x=gdpPercap, y = rank, fill = country), stat = "identity")+ # I need to use geom_bar to make the bar
    geom_text(aes(x = -1000, y = rank, label = country), vjust = 0.2, hjust = 1, size = 4) +
    labs(x = "GDP per capita", y = NULL) +
    scale_x_continuous(breaks = seq(0, 90000, 10000), expand = expansion(mult = c(.2, 0.05))) +
    theme(legend.position="none",
    axis.text.y = element_blank(),
    axis.title.y=element_blank(),
    axis.ticks=element_blank(),panel.background=element_blank())

    g<-p + transition_time(year) +
    labs(title = "Year: {frame_time}")

    animate(g, nframes = 50, fps = 20, renderer = gifski_renderer())

    关于r - 如何在 y 轴的左侧制作 geom_text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62578368/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com