绘制金字塔图

2023-11-27

我需要画一个金字塔图,如所附的。

alt text

我找到了一个使用 R (但不是 ggplot)的示例here,任何人都可以给我一些使用 ggplot 执行此操作的提示吗?谢谢!


我用了一些解决方法——而不是使用 geom_bar,而是使用了 geom_linerange 和 geom_label。

library(magrittr)
library(dplyr)
library(ggplot2)

population <- read.csv("https://raw.githubusercontent.com/andriy-gazin/datasets/master/ageSexDistribution.csv")

population %<>% 
  tidyr::gather(sex, number, -year, - ageGroup) %>% 
  mutate(ageGroup = gsub("100 і старше", "≥100", ageGroup), 
     ageGroup = factor(ageGroup,
                        ordered = TRUE,
                        levels = c("0-4", "5-9", "10-14", "15-19", "20-24",
                                   "25-29", "30-34", "35-39", "40-44", 
                                   "45-49", "50-54", "55-59", "60-64",
                                   "65-69", "70-74", "75-79", "80-84",
                                   "85-89", "90-94", "95-99", "≥100")),
     number = ifelse(sex == "male", number*-1/10^6, number/10^6)) %>% 
  filter(year %in% c(1990, 1995, 2000, 2005, 2010, 2015))

png(filename = "~/R/pyramid.png", width = 900, height = 1000, type = "cairo")

ggplot(population, aes(x = ageGroup, color = sex))+
  geom_linerange(data = population[population$sex=="male",], 
                 aes(ymin = -0.3, ymax = -0.3+number), size = 3.5, alpha = 0.8)+
  geom_linerange(data = population[population$sex=="female",], 
                 aes(ymin = 0.3, ymax = 0.3+number), size = 3.5, alpha = 0.8)+
  geom_label(aes(x = ageGroup, y = 0, label = ageGroup, family = "Ubuntu Condensed"), 
         inherit.aes = F,
         size = 3.5, label.padding = unit(0.0, "lines"), label.size = 0,
         label.r = unit(0.0, "lines"), fill = "#EFF2F4", alpha = 0.9, color = "#5D646F")+
  scale_y_continuous(breaks = c(c(-2, -1.5, -1, -0.5, 0) + -0.3, c(0, 0.5, 1, 1.5, 2)+0.3),
                 labels = c("2", "1.5", "1", "0.5", "0", "0", "0.5", "1", "1.5", "2"))+
  facet_wrap(~year, ncol = 2)+
  coord_flip()+
labs(title = "Піраміда населення України",
   subtitle = "Статево-вікові групи у 1990-2015 роках, млн осіб",
   caption = "Дані: Держкомстат України")+
  scale_color_manual(name = "", values = c(male = "#3E606F", female = "#8C3F4D"),
                 labels = c("жінки", "чоловіки"))+
  theme_minimal(base_family = "Ubuntu Condensed")+
theme(text = element_text(color = "#3A3F4A"),
    panel.grid.major.y = element_blank(),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_line(linetype = "dotted", size = 0.3, color = "#3A3F4A"),
    axis.title = element_blank(),
    plot.title = element_text(face = "bold", size = 36, margin = margin(b = 10), hjust = 0.030),
    plot.subtitle = element_text(size = 16, margin = margin(b = 20), hjust = 0.030),
    plot.caption = element_text(size = 14, margin = margin(b = 10, t = 50), color = "#5D646F"),
    axis.text.x = element_text(size = 12, color = "#5D646F"),
    axis.text.y = element_blank(),
    strip.text = element_text(color = "#5D646F", size = 18, face = "bold", hjust = 0.030),
    plot.background = element_rect(fill = "#EFF2F4"),
    plot.margin = unit(c(2, 2, 2, 2), "cm"),
    legend.position = "top",
    legend.margin  = unit(0.1, "lines"),
    legend.text  = element_text(family = "Ubuntu Condensed", size = 14),
    legend.text.align = 0)

dev.off()

这是结果图:

and here's the resulting plot

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绘制金字塔图 的相关文章

  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • 如何在R中计算文本中的句子数?

    我使用 R 将文本读入readChar 功能 我的目的是测试文本句子中字母 a 出现次数与字母 b 出现次数一样多的假设 我最近发现了 stringr 包 它帮助我对文本做很多有用的事情 例如计算字符数以及整个文本中每个字母出现的总数 现在
  • 基于服务器中的条件逻辑呈现闪亮的用户输入

    我正在尝试设置一个闪亮的导航栏面板页面 其中用户控制我根据一组单选按钮中所做的初始选择来显示更改 我直接在 ui 中渲染单选按钮 然后在 Server r 中的 观察到的 逻辑控制结构内构建条件控件 弹出错误是因为我的初始 if 语句计算结
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • 将年月格式转换为 POSIXct [重复]

    这个问题在这里已经有答案了 我有一些年月形式的数据 我想将其格式化以用于绘图ggplot date lt c 2016 03 2016 04 2016 05 2016 06 2016 07 2016 08 2016 09 2016 10 2
  • numpy.histogram 的 hist 维度,密度 = True

    假设我有这个数组 A array 0 0019879 0 00172861 0 00527226 0 00639585 0 00242005 0 00717373 0 00371651 0 00164218 0 00034572 0 008
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 使用 broom 和 tidyverse 总结 r 平方游戏

    我发布了一个问题here https stackoverflow com questions 48627287 getting adjusted r squared value for each line in a geom smooth
  • 删除ggplot2中的负图区域[重复]

    这个问题在这里已经有答案了 如何删除 ggplot2 中 x 轴和 y 轴下方的绘图区域 请参见下面的示例 我尝试了几个主题元素 panel border panel margin plot margin 但没有任何运气 p lt ggpl
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 纵向序列数据的三次样条方法?

    我有一个串行数据 格式如下 time milk Animal ID 30 25 6 1 31 27 2 1 32 24 4 1 33 17 4 1 34 33 6 1 35 25 4 1 33 29 4 2 34 25 4 2 35 24
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集

随机推荐

  • var self = this; 是吗?一个糟糕的模式?

    我发现自己需要 var self this 我的 javascript 类 中有很多内容 虽然这种做法很常见 但感觉有点不对劲 我希望在这个问题中找到一种更好的方法来处理这个问题 或者让我相信这没什么问题 这是保持正确绑定的标准方法吗 我是
  • 在java中发送电子邮件时抛出javax.mail.AuthenticationFailedException

    我是java初学者 我想用java发送电子邮件 因为我在Java中使用这段代码 但我的代码抛出了异常 我需要注意为什么 这是异常的堆栈跟踪 javax mail AuthenticationFailedException 534 5 7 1
  • cakephp 一种表单,多个模型,不显示一个模型的验证消息

    我有一个注册表单 我正在用户和身份表中创建一条记录 用户有许多身份 表格看起来像这样 fieldset legend legend fieldset
  • Sql SMO:如何获取数据库物理文件名的路径?

    我正在尝试返回数据库的 mdf ldf 文件的物理文件路径 我尝试使用以下代码 Server srv new Server connection Database database new Database srv dbName strin
  • Chrome 渲染颜色的方式与 Safari 和 Firefox 不同

    由于某种原因 Chrome 将 FF3A00 渲染为 FF0000 我包含了来自的屏幕截图jsfiddle来说明这一点 色度计报告的颜色 以及我看到的颜色 与 CSS 所说的颜色不同 其他颜色也会发生这种情况 例如 FFAF00 根据色度计
  • 使用 Assembly.LoadFrom 和 Assembly.Load 混合加载程序集时的奇怪行为

    使用混合加载程序集时的奇怪行为Assembly LoadFrom and Assembly Load 我在加载程序集时遇到了奇怪的行为Assembly LoadFrom稍后与Assembly Load 我正在使用加载程序集Assembly
  • ASP.NET Web API 返回可查询的 DTO?

    我使用 ASP NET Web API 构建了一个不错的小 API 但我想从我的上下文 实体框架 AsQueryable 返回实体是不正确的 因此我将所有内容映射到 DTO 对象 然而我不太明白 如何保持上下文可查询 但仍然只返回 DTO
  • “计算附加信息”是什么意思?

    Eclipse Helios 定期开始运行显示 计算附加信息 的作业 这段时间 Eclipse 非常迟缓 几乎无法使用 这份工作是做什么的 我可以把它关掉吗 我只是希望 JDT 团队中有人能够意识到并摆脱它 让它运行得更快 或者至少将其更改
  • 允许所有远程连接,MySQL

    我一直在使用 SQL Server 现在在一个项目中使用 MySQL 使用 SQL Server 如果我们的开发人员知道主机 用户名和密码 他们就可以连接到本地计算机上的远程数据库 不过 对于 MySQL 为了让开发人员能够从本地计算机进行
  • 在类构造函数中包含参数是否可以接受?

    我正在编写一个 ruby gem 它对于计算文本中单词的出现次数很有用 我选择在类构造函数中放置 3 个参数 代码可以工作 但我想重构它以使其美观 根据您的经验 作为 API 读取 维护 使用一个带有没有参数的构造函数和大量 setter
  • OpenCV:FFMPEG:编解码器不支持标签 0x34363268/'h264'

    像在 Mac OS 10 13 6 上一样安装 opencv 后 conda install c conda forge ffmpeg conda install c conda forge opencv 并使用fourcc cv2 Vid
  • OCaml 类型推断算法如何工作?

    我目前正在学习 OCaml 我很好奇 OCaml 如何进行类型推断 我知道这是通过一个称为统一的过程完成的 我尝试阅读已发表论文中的算法 但符号让我失望 谁能为我描述一下分步过程 实际上 可以说统一是算法的实现细节 类型系统只是一组规则 这
  • 使用 ng-click 在 angularJs 中添加和删除类

    我正在尝试如何使用 ng Click 添加课程 我已经将我的代码上传到plunker中点击这里 查看角度文档 我无法弄清楚应该完成的确切方法 下面是我的代码片段 有人可以引导我走向正确的方向吗 div class block div 控制器
  • 将矩导入 Angular 会出现错误

    我收到以下错误 Module node modules moment moment has no exported member default 当我使用 import as moment from moment import defaul
  • 如何在 SQLAlchemy 中加载 SQLite3 扩展?

    我构建了一个 SQLite 扩展 即 so 库 我想使用 SQLAlchemy 在我的应用程序中使用它 它是一个 Flask 应用程序 但我不认为 Flask 在这里发挥作用 该扩展可以从 CLI 加载并且似乎可以工作 sqlite3 SQ
  • P0522R0如何破码?

    今天我正在阅读 clang 的 C 17 支持页面 我注意到一些奇怪的事情 特点将模板模板参数与兼容的参数相匹配 P0522R0 被标记为部分 因为它必须通过开关激活 他们的笔记says 尽管是缺陷报告的解决方案 但该功能在所有语言版本中默
  • 取消设置字中的最高有效位 (int32) [C]

    如何取消设置一个字的最高有效位 例如 0x00556844 gt 0x00156844 有一个 builtin clz在 gcc 中 但它只计算零 这对我来说是不需要的 另外 我应该如何替换 msvc 或 intel c 编译器的 buil
  • SQL 查询获取结果集最后一行中所有列值的总和以及行总和(分组依据)

    有人可以帮我编写一个查询来获取 TCS 和 TRS 吗 ID Jan Feb Mar TRS 1 4 5 6 15 2 5 5 5 15 3 1 1 1 3 TCS 10 11 12 TCS 总列总和 和TRS 总行总和 分别是新的列和行
  • setTimeout 是使用 javascript 执行异步函数的好解决方案吗?

    在网上搜索有关异步函数的信息 我发现很多文章使用 setTimeout 来完成这项工作 window setTimeout function console log second 0 console log first Output fir
  • 绘制金字塔图

    我需要画一个金字塔图 如所附的 我找到了一个使用 R 但不是 ggplot 的示例here 任何人都可以给我一些使用 ggplot 执行此操作的提示吗 谢谢 我用了一些解决方法 而不是使用 geom bar 而是使用了 geom liner