将 axis.text 标签与 ggplot 中数据框变量中包含的颜色相匹配

2024-03-10

我想创建一个堆积条形图,其中我的axis.text从数据框中的变量获取颜色值,该变量还提供条形图的颜色值fill颜色。这非常重要,因为最终视觉效果的消费者将查看一系列这些条形图,因此我需要确保每种产品类型的颜色一致,即使数量值(以及顺序)会有所不同。以下是我能得到的最接近的。

# My data sample
df <- data.frame(x=1:4, Type = c("Metals", "Foodstuff", "Textiles", "Machinery"), myColour = c('blue', 'red', 'green', 'orange'), Amount = c(75, 50, 25, 5))

# Create factor to order by amount value
df$Type <- factor(df$Type, levels = df[order(df$Amount), "Type"])

# MAKE BAR
gg1 <- ggplot(df, aes(Type, Amount, fill = Type, color = myColour)) +
  geom_bar(stat = 'identity', position = 'dodge', show.legend = FALSE, width = .85, colour = 'lightgrey', fill = df$myColour) + 
  #ggtitle("Exports Profile (%)") +
  labs(x = NULL, y = NULL) +
  scale_y_continuous(breaks = waiver(), limits = c(0,100)) +
  theme(#plot.title = element_text(family= 'sans', color = 'black', size = 28), 
    #axis.title = element_text(family= 'sans', color = 'black', size = 24), 
    axis.text.y = element_text(colour = df$myColour, size = 18, face = 'bold'),
    axis.ticks.y = element_blank(),
    axis.text.x = element_text(colour = 'black', size = 16),
    axis.ticks.x = element_line(colour = 'grey60'),
    axis.ticks.length = unit(3, "mm"),
    axis.line = element_line(NULL),
    plot.background = element_rect(fill = NULL),
    panel.background = element_rect(fill = 'white', colour = 'white'),
    panel.grid.major.x = element_line(colour = 'grey60', linetype = 'dashed'),
    panel.grid.major.y = element_line(colour = 'grey60', linetype = 'dashed'),
    #panel.margin = unit(c(0,0,0,0), "mm"),
    aspect.ratio = (600/450)) + 
  coord_flip()
gg1

Which produces: enter image description here


您的因子水平未与因子顺序的更改进行映射。

请注意,我对你的进行了更改df这样在重新排序时它确实会发生变化,变化是在Amount column.

df <- data.frame(x=1:4, Type = c("Metals", "Foodstuff", "Textiles", "Machinery"), 
        myColour = c('blue', 'red', 'green', 'orange'), Amount = c(50, 75, 25, 5))

帮自己一个忙,加载 tidyverse

library(tidyverse)

然后使用theme_set

theme_set(theme_classic()+
          theme(panel.grid.major.x = element_line(colour = 'grey60', linetype = 'dashed'),
                panel.grid.major.y = element_line(colour = 'grey60', linetype = 'dashed'),
                axis.ticks.y = element_blank(),
                axis.text.x = element_text(colour = 'black', size = 16),
                axis.ticks.x = element_line(colour = 'grey60'),
                axis.ticks.length = unit(3, "mm"),
                aspect.ratio = (600/450),
                axis.title.x=element_blank(),
                axis.title.y=element_blank()))

然后,您可以“破解”并重新调整因素(也许不是最好的方法,但可以完成)。

df %>% arrange(Amount) %>% 
    mutate(myColour = factor(myColour, myColour), 
               Type = factor(Type, Type)) -> df1

这样就可以更轻松地提取颜色级别作为绘图向量。

mycols <- as.vector(levels(df1$myColour))

然后绘制

ggplot(df1, aes(Type, Amount, color = myColour, fill = myColour)) + 
           geom_bar(stat = 'identity', position = 'dodge', show.legend = FALSE, width = .85) + 
           theme(axis.text.y = element_text(colour = mycols, size = 18, face = 'bold')) + 
           coord_flip() +
           scale_fill_manual(values = mycols) +
           scale_color_manual(values = mycols)

希望这对你有用。

这是无效的原始编辑,因此可以忽略:更改df$myColour to myColour在代码中的两个实例中。

有了这么多主题调整,您应该真正考虑使用theme_set以及。

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

将 axis.text 标签与 ggplot 中数据框变量中包含的颜色相匹配 的相关文章

  • 使用 ggplot2 修改点子集的形状

    我正在尝试绘制一个沿大量维度变化的大型散点图 这是我的起始情节 p lt ggplot mtcars aes wt mpg shape cyl colour gear size carb geom point 使用mtcars数据集 我只是
  • dplyr 中的 Summarize 是否可以不删除数据框中的其他列?

    我有一个包含三列的数据框 我正在尝试进行简单的总结以查找数据框中每个城市的最高温度 但同时保留每个最高温度列出的日期 这是数据框 我们称之为 maxT new ID Date Max TemperatureF 1 TUS 1960 04 0
  • 分离并重新附加“tools:rstudio”

    又名玩火 以下不起作用 rstd obj lt as environment tools rstudio detach tools rstudio attach rstd obj name tools rstudio 好吧 它似乎有效 但随
  • 将值替换为其各自列的名称

    我有一个数据框 Code 401k CVS 101A true 231N true FD54 true 99JB 85F4 true 我试图用相应的列名称 例如 401k 替换 true 字符值 这是我想要的输出 Code 401k CVS
  • 如何褪色

    我想将像素的颜色淡化为白色 但显然保持相同的颜色 如果我有一个像素 200 120 40 将每个值加上 10 以使 210 130 50 使其颜色相同 只是颜色更浅 还是会完全改变颜色 例如 我知道 100 100 100 即将 110 1
  • 将列表中的列转换为 R 中的数据框

    我有使用 R 创建的以下列表 set seed 326581 X1 rnorm 10 0 1 Y1 rnorm 10 0 2 data data frame X1 Y1 lst lt replicate 100 df smpl lt dat
  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • R.matlab/readMat:readTag(this) 中出错

    我正在尝试使用 R matlab 将 matlab 文件读入 R 但遇到此错误 require R matlab r lt readMat file mat verbose T Trying to read MAT v5 file stre
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 比较 R 中的两个字符向量

    我有两个 ID 字符向量 我想比较这两个字符向量 特别是我对以下数字感兴趣 A和B各有多少个ID 有多少个ID在A中但不在B中 有多少个ID在B但不在A 我还想画维恩图 以下是一些可以尝试的基础知识 gt A c Dog Cat Mouse
  • fread 将空导入为 NA

    我正在尝试导入带有空白的 csv 读取为 不幸的是他们都读作 NA now 为了更好地演示问题 我还展示了如何NA NA and 都映射到同一事物 除了最底部的示例 这将妨碍简单的解决方法dt is na dt lt gt write cs
  • 为绘图制作 2D 图例 - 双变量分区统计图

    我一直在玩双变量 choropleth 地图 并且一直在如何创建类似于 2d 图例的问题上陷入困境约书亚 史蒂文斯 http www joshuastevens net cartography make a bivariate chorop
  • R 中的字符串作为函数参数

    数据框chocolates列出了糖果的类型以及每种糖果的一组评级 ID sweetness filling crash snickers 0 67 0 55 0 40 milky way 0 81 0 53 0 56 我正在编写一个函数 它
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • 表单提交时出现 rvest 错误

    我想从以下网页中抓取数据 https swgoh gg u zozo collection 180 emperor palpatine https swgoh gg u zozo collection 180 emperor palpati
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug

随机推荐