AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-11068947

LT17's questions

Martin Hope
LT17
Asked: 2024-10-11 21:48:31 +0800 CST

在 ggplot2 中的水平堆叠条形图顶部设置标签

  • 8

我有一个虚拟数据集:

tmp <- structure(list(order = c("John", "John", "John", "Ross", "Ross", 
"Ross", "John", "John", "John", "Ross", "Ross", "Ross"), value = c(39, 
40, 13, 19, 13, 15, -12, -3, 0, -4, -1, 0), Category = c("VU", 
"EN", "CR", "VU", "EN", "CR", "VU", "EN", "CR", "VU", "EN", "CR"
), perc = c(NA, NA, NA, NA, NA, NA, NA, "14%", NA, NA, "9.6%", 
NA)), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 25L, 26L, 27L, 28L, 
29L, 30L), class = "data.frame")

我想在每个条形图的顶部显示图表左侧的百分比(负值)。这是我的代码:

ggplot(tmp, 
             aes(fill = Category, y = value, x = reorder(order, value))) + 
  
  # add light grey vertical lines in correspondance of x axis thicks
  geom_hline(yintercept = c(seq(-20, 0, 5), seq(0, 100, 20)), colour = "grey92") + 
  
  # add stacked bars with grey contouring
  geom_bar(position = "stack", stat = "identity", alpha = .8, color = "grey50") + 
  
  # add zero vertical line
  geom_hline(yintercept = 0, colour = "grey50", linewidth = 1.5, linetype = "dashed") +  
  
  # add % for negative values
  geom_text(aes(label = perc), 
            hjust = 2,
            size = 10) + 
  
  # add y axis breaks and limits
  scale_y_continuous(breaks = c(seq(-20, 0, 10), seq(0, 100, 20)), 
                     limits = c(-36, 100),
                     expand = c(0, 0)) + 
  
  # add discrete colour scale
  scale_fill_manual(values = c("#E55C30FF","#FBB91FFF","#FCFFA4FF")) +
  
  # flip horizontally
  coord_flip() 

以下是最终的剧情: 在此处输入图片描述

由于有些条形比其他条形长,如果我尝试一下hjust,我可以同时移动所有标签。有没有办法让所有标签显示在条形的顶部(在本例中,在侧面,因为它是水平条形图)?

  • 1 个回答
  • 28 Views
Martin Hope
LT17
Asked: 2024-01-02 17:55:20 +0800 CST

当我尝试将自定义颜色映射到 ggplot2 中的每个组时,条形图变得堆积

  • 5

我想使用 生成水平分组条形图ggplot2。数据按 分组Name,每个分组Name有 1Color和 2 School,应使用不同的透明度 ( Alpha) 进行可视化。我已将所需的所有数据放入数据框 ( test) 中。

library(tidyverse)

test <- structure(list(Name = c("Jean", "Jean", "Mike", "Mike", "Ruth", 
                                "Ruth", "Elia", "Elia", "Jess", "Jess"), 
                       School = c("A", "B", "A", "B", "A", "B", "A", "B", "A", "B"), 
                       Value = c(11L, 8L, 15L, 16L, 27L, 22L, 0L, 4L, 0L, 3L), 
                       Color = c("#E55C30FF", "#E55C30FF","#FBB91FFF", "#FBB91FFF", "#FCFFA4FF", "#FCFFA4FF", "#C7E8AC", "#C7E8AC", "#228B22", "#228B22"),
                       Alpha = c(0.9, 0.4, 0.9, 0.4,0.9, 0.4, 0.9, 0.4, 0.9, 0.4)), 
                  row.names = c(NA, -10L), class = "data.frame")

test

   Name School Value     Color Alpha
1  Jean      A    11 #E55C30FF   0.9
2  Jean      B     8 #E55C30FF   0.4
3  Mike      A    15 #FBB91FFF   0.9
4  Mike      B    16 #FBB91FFF   0.4
5  Ruth      A    27 #FCFFA4FF   0.9
6  Ruth      B    22 #FCFFA4FF   0.4
7  Elia      A     0   #C7E8AC   0.9
8  Elia      B     4   #C7E8AC   0.4
9  Jess      A     0   #228B22   0.9
10 Jess      B     3   #228B22   0.4

我正在努力为每个组映射正确的颜色。这是我到目前为止的代码,它实现了分组、水平绘图、透明度和灰色轮廓。但我无法将每种颜色映射到每个组。

ggplot(test, 
       aes(y = Name, x = Value, fill = School, alpha = Alpha)) +
  geom_bar(stat = "identity", position = "dodge", color = "grey50") +
  scale_alpha_identity() 

fill = df$Color我尝试在里面添加geom_bar(),我也尝试将其更改为一个因子(fill = as.factor(df$Color)),但是条形图堆积起来而不是保持分组。我仍然难以理解ggplot2语法,我想我在这里忽略了一些简单的东西......

编辑:我想更改的是条形的填充,其中每个条形Name应该有自己的填充(根据其Name本身,如 中指定的df$Color),然后使用不同的透明度来区分School。

  • 2 个回答
  • 48 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve