gpt4 book ai didi

r - 如何在ggplot2中为geom_col的边框着色以避免重叠?

转载 作者:行者123 更新时间:2023-12-03 23:06:24 53 4
gpt4 key购买 nike

我想在 ggplot2 中为条形图的边框着色。

以下脚本是一个示例。

如您所见,橙色边框与蓝色边框重叠。
有什么方法可以避免这种行为并为图形中的边框着色?


library(tidyverse)
dat <- tibble(
dx = c("D+","D+","D-","D-"),
test = c("T+","T-","T+","T-"),
num = c(40,80,100,800)
)

ggplot(dat) +
geom_col(aes(x = dx, y = num, fill = dx, color = test),
size = 3) +
scale_color_manual(values = c("orange","blue"))

enter image description here

最佳答案

问题是条形图是由 grid::rectGrob 构建的,以及当您绘制 rectGrob 的轮廓时更大,它长出来的方式。由于线条是固定点大小,但条形本身不是(如果您更改窗口大小,您将看到),没有简单的方法来缩小 rectGrob s 来弥补这一点,以允许内部轮廓。因此,这实际上是一个比最初出现的更难解决的问题。当然,这也不是不可能,但是您的三个选择是:

  • 选择不同的绘图方式(如 position_dodge )
  • 通过临时黑客实现您正在寻找的效果
  • 写一个全新的geom来实现这个效果(或者找一个已经做了这个的包)

  • 如果这只是一次性的,并且您热衷于为您的情节追求特定的外观,我肯定会选择选项 2。这是如何实现的示例:
    ggplot(dat) +
    geom_col(aes(x = dx, y = num, fill = dx, color = test),
    size = 3) +
    scale_color_manual(values = c("orange","blue")) +
    geom_segment(aes(x = 0.53, y = 100, xend = 1.465, yend = 100),
    size = 3, colour = "blue") +
    geom_segment(aes(x = 0.53, y = 120, xend = 1.465, yend = 120),
    size = 3, colour = "orange") +
    geom_segment(aes(x = 1.53, y = 40, xend = 2.465, yend = 40),
    size = 3, colour = "blue") +
    geom_segment(aes(x = 1.53, y = 60, xend = 2.465, yend = 60),
    size = 3, colour = "orange")

    enter image description here

    关于r - 如何在ggplot2中为geom_col的边框着色以避免重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62465149/

    53 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com