如何在条形图上更正 R 中 y 轴的比例和顺序

Posted

技术标签:

【中文标题】如何在条形图上更正 R 中 y 轴的比例和顺序【英文标题】:How do I correct the scale and order of the y axis in R on a barplot 【发布时间】:2021-12-06 17:21:22 【问题描述】:

使用钻孔数据,尝试用 R 绘制横截面。我生疏了,无法按照我想要的方式组织绘图。从图像来看,我的条形图没有使用显示钻孔深度的 y 轴值进行跟踪,而是使用图层(分类数据)进行跟踪。

here 提出了非常相似的问题,但我无法让代码适用于我的情况,因为我的数据格式不同。

为了澄清,我想将 y 轴按递增的数字顺序排列,从 0 开始,分类层数据映射到该深度的正确部分。

我的代码:

g2 <- ggplot(data=df3,
        mapping = aes(x=PointID,y=End_Depth,
                      fill=`Layer`)) +
  geom_col(colour="black") +
  labs(y="Depth")

The Data

【问题讨论】:

请不要将代码或数据作为图像发布。如果您包含一个简单的可重现示例以及可用于测试和验证可能解决方案的示例输入(例如,使用 dput()),则更容易为您提供帮助。请参阅链接以了解改进问题的方法:***.com/questions/5963269/… (有很多理由不提供数据图像,请参阅meta.***.com/a/285557 了解其中的几个。) 仅供参考,用于格式化:划分代码块的“栅栏”是三个反引号```,而不是三个单引号'''并且它们必须在自己的一行上,并且没有代码共享。这意味着类似于```\ng2 &lt;- ggplot(...) +\n geom_col(...) +\n labs(...)\n```。一个例外是,使用 Stack 接口,可以为美学提供语法“提示”,例如 ```r ... 但这仍然必须单独一行。请参阅***.com/editing-help 和meta.stackexchange.com/a/22189。谢谢! @r2evans 太棒了!谢谢您的帮助。我第一次使用*** 【参考方案1】:

您所指的问题包含一个非常好的主意,可以改用 geom_rect 。您可以执行以下操作(代码中的 cmets)

library(tidyverse)

# just some fake data, similar to yours
foo <- data.frame(id = "id", layer = letters[1:6], depth = c(5,10,12,15,20,25))

foo2 <- 
  foo %>%
  # using lag to create ymin, which is needed for geom_rect
  # transforming id into integers so i can add / subtract some x for xmin/xmax
  mutate( ymin = lag(depth, default = 0),
         id_int = as.integer(factor(id))) 
  
# I am turning off the legend and labelling the layers directly instead 
# using geom_text
# this creates a "wrong" y axis title which I'm changing with labs(y = ... )
# the continuous x axis needs to be turned into a fake discrete axis by
# semi-manually setting the breaks and labels
ggplot(foo2) +
  geom_rect(aes(xmin = id_int - .5, xmax = id_int +.5, 
                ymin = ymin, ymax = depth,
                fill = layer), show.legend = FALSE) +
  geom_text(aes(x = id_int, y = (depth + ymin)/2, label = layer)) +
  scale_x_continuous(breaks = foo2$id_int, labels = foo2$id) +
  labs(y = "depth") 

由reprex package (v2.0.1) 于 2021 年 10 月 19 日创建

【讨论】:

太棒了!我将如何反转 y 轴(将 0 设为顶部并显示 25 之后的空白以表示假设的基础从该点继续)?另外,我如何使条本身更薄(使图看起来更像垂直管的圆柱形)?我应该如何自己编辑/自定义颜色?最后,如何将标签信息添加回来? @allencadbim1 这些是许多后续问题,我想您可以在 SO 的其他地方找到答案。如果您没有成功,请提出新问题,并且不要忘记链接到您之前的问题,以便人们知道之前已经完成了哪些工作。

以上是关于如何在条形图上更正 R 中 y 轴的比例和顺序的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签

Plotly Python:在具有多个 Y 轴的分组条形图中对齐 X 轴

如何在具有不同 Y 轴的同一个 seaborn 图中很好地制作条形图和线图?

固定y轴的比例/大小

R Plotly:右侧 Y 轴的水平条形图

如何为 R 中使用百分比而不是计数作为 y 轴的数据框创建条形图?