【r<-ggplot2】修改x和y轴刻度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【r<-ggplot2】修改x和y轴刻度相关的知识,希望对你有一定的参考价值。

参考技术A

这个 R tutorial 描述如何使用 ggplot2 包修改x和y轴刻度。同样,该文包含如何执行轴转换(对数化,开方等)和日期转换。

使用ToothGrowth:

请确保 dose 变量变为因子类型。

下面是一些设置刻度的函数:

想要改变连续轴的范围,可以使用 xlim() 和 ylim() 函数:

min和max是每个轴的最小值和最大值。

注意,函数 expand_limits() 可以用于:

也可以使用函数 scale_x_continuous() scale_y_continuous() 分别改变x和y轴的刻度范围。 t

函数简单的形式如下:

下面是示例:

内置转换函数:

使用示例:

函数 coord_trans() 也可以用于轴坐标转换

这需要加载 scales 包:

格式化刻度标签:

可以使用函数 annotation_logticks() 添加对数化刻度标记。

Note that, these tick marks make sense only for base 10

使用MASS包动物数据:

运行示例:

设置显示的位置

字母含义:

使用函数 scale_x_date() scale_y_date()

使用 scales 包:

使用数据:

Create the plot of psavert by date :

阅读函数 scale_x_datetime() scale_y_datetime() 的说明。

R ggplot facet label在y轴标题和y轴刻度标签之间的位置

【中文标题】R ggplot facet label在y轴标题和y轴刻度标签之间的位置【英文标题】:R ggplot facet label position between y axis title and y axis tick mark labels 【发布时间】:2021-12-19 16:29:09 【问题描述】:

我想将构面标签一直放在左侧,这样 y 轴标题就在它的右侧。我已经可以创建一个合适的间距,但是我不能交换顺序。

library(ggplot2)
library(tibble)
tg <- ToothGrowth %>%
  as_tibble()

tg %>%
  ggplot(aes(supp, len)) +
  geom_boxplot(aes(fill = supp)) +
  theme(strip.placement = "outside",
        strip.switch.pad.grid = unit(1, "cm"),) +
  facet_grid(dose ~ ., switch = "y")

这个顺序很重要,因为我将这个图与其他两个图放在一起以获得更一致的布局。谢谢!!

编辑:对我来说最好的解决方案是 aosmith 评论中的第二个链接。

代码如下:

tg %>%
  ggplot(aes(supp, len)) +
  geom_boxplot(aes(fill = supp)) +
  facet_grid(dose ~ ., switch = "y") +
  theme(strip.placement = "outside",
        strip.switch.pad.grid = unit(1, "cm"),
        axis.title.y = element_text(vjust = -15))

带有网格包的解决方案看起来也不错,但是继续使用它很复杂。 假轴的解决方案改变了x轴刻度线的间距 并且 "label = " 不接受表达式。 感谢大家的大力帮助!

【问题讨论】:

我在this similar SO question/answer 中看到了一种(复杂的!)方法。为another SO question 展示了其他几种方法。 【参考方案1】:

我认为这在 ggplot 中是不可能的,因为完成的gtable 的布局方式。 y 轴标签始终位于刻面条的左侧。当然,您可以根据 aosmith 共享的链接渲染 ggplot 并交换 gtable。对于您想要做的事情来说,这可能有点太复杂了。

我认为实现您想要的结果的最简单方法是使用grid.draw 在绘图上绘制 y 轴标签。

tg %>%
  ggplot(aes(supp, len)) +
  geom_boxplot(aes(fill = supp)) +
  theme(strip.placement = "outside",
        strip.switch.pad.grid = unit(1, "cm"),) +
  labs(y = "") +
  facet_grid(dose ~ ., switch = "y") +
  theme(strip.placement = "outside") 

library(grid)

grid.draw(textGrob("len", x = unit(0.1, "npc"), y = unit(0.53, "npc"), rot = 90))

如果您想要一个 ggplot 对象而不必在其上绘制,另一种方法是使用 geom_text 制作一个假轴标题。这将需要更多的工作,但最终结果更加独立,因为它可以作为对象传递,并且可以对其进行各种修改,而不必总是在之后绘制标签:

tg %>%
  ggplot(aes(supp, len)) +
  geom_boxplot(aes(fill = supp)) +
  scale_y_continuous(labels = function(x) formatC(x, width = 10)) +
  theme(strip.placement = "outside",
        strip.switch.pad.grid = unit(1, "cm"),) +
  labs(y = "") +
  scale_color_manual(values = c("white", "black", "white"),
                     guide = guide_none()) +
  geom_text(aes(x = -0.5, y = 20, color = factor(dose), label = "len"),
            check_overlap = TRUE, angle = 90) +
  facet_grid(dose ~ ., switch = "y") +
  coord_cartesian(clip = "off", xlim = c(0.5, 2.5))

【讨论】:

感谢您的建议!考虑到它是一个非本地解决方案,它似乎是可行的,只需相对较少的额外努力。我将直接使用我的数据进行尝试。再次感谢! @maRvin 您可能需要在对textGrob 的调用中使用unit 调用中的数字来正确定位轴标签。如果您需要更改字体、颜色等,您可以使用textGrob 内部的一个名为gp 的参数来实现,该参数将调用grid::gpar 作为参数 - 请参阅?grid::gpar 是的,将x = unit(0.1, "npc") 增加到x = unit(0.11, "npc") 添加了上标编号所需的间距。 :) grid.draw 似乎与 ggsave 不兼容。网格包中是否有兼容的替代方案?还是您必须以不同的方式保存绘图(例如,使用 png())? @maRvin 查看我的更新,它提供了一个可以与 ggsave 一起使用的纯 ggplot 解决方案

以上是关于【r<-ggplot2】修改x和y轴刻度的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化时间序列散点图X轴和Y轴都是时间信息使用labels参数在scale_y_datetime函数中自定义指定Y轴时间信息轴标签刻度显示的格式

使用ggplot2更改R中的x轴刻度标签[重复]

R语言ggplot2可视化:默认情况下ggplot2在x轴和y轴的刻度线和轴之间保留了一些空间设置ggplot2可视化去除可视化结果与坐标轴之间的空间可视化结果与坐标轴紧紧贴合,没有空白区域

R语言ggplot2包绘制双坐标轴图(双Y轴图)实战:两个Y轴分别使用不同的刻度范围

R ggplot facet label在y轴标题和y轴刻度标签之间的位置

ggplot2:x 和 y 轴带有黑色标签的经典绘图