gpt4 book ai didi

r - 在ggplot2中用直方图叠加箱线图

转载 作者:行者123 更新时间:2023-12-01 19:45:25 25 4
gpt4 key购买 nike

嗨,我想用 R 脚本创建一个类似的图表,如下所示:

enter image description here

取自:https://community.tableau.com/thread/194440

这是我在 R 中的代码:

library(ggplot2)

ifile <- read.table("C:/ifiles/test.txt", skip = 2, header = TRUE, sep="\t")
ifileVI <- data.frame(ifile["VI"], ifile["Site"])
x<-quantile(ifileVI$VI,c(0.01,0.99))
data_clean <- ifileVI[bfileVI$VI >=x[1] & ifileVI$VI <=x[2],]

p <- ggplot(data_clean, aes(x = Site, y = VI, group=Site)) + geom_boxplot() + geom_histogram(binwidth = 0.05)

p

但是我收到以下错误:
Error: stat_bin() must not be used with a y aesthetic.

文件VI:

Id	    VI	Site
WFR1 2.91 1
WFR1 2.89 2
WFR1 2.86 3
WFR1 2.91 4
WFR1 2.87 1
WFR1 2.67 2
WFR1 2.76 3
WFR1 2.74 4
WFR1 2.98 4
WFR1 2.89 3
WFR1 2.55 4
WFR1 2.96 3
WFR1 2.71 1
WFR1 2.98 2
WFR1 2.89 3
WFR2 2.55 2
WFR2 2.86 4
WFR2 2.91 3
WFR2 287 1
WFR2 2.74 2
WFR2 2.98 1
WFR2 2.89 2
WFR2 2.55 3
WFR2 2.96 4
WFR2 2.71 1
WFR2 2.86 2
WFR2 2.91 3
WFR2 287 4
WFR2 2.67 1
WFR2 2.76 2
WFR2 2.74 3
WFR2 2.98 4
WFR2 2.89 1
WFR2 2.55 2
WFR2 2.96 3
WFR2 2.71 4
WFR2 2.98 1
WFR2 2.89 2
WFR2 2.55 3
WFR2 2.86 4

最佳答案

您可以尝试用矩形替换直方图以生成如下图:

enter image description here

这该怎么做:

生成随机数据

df <- data.frame(State = LETTERS[1:3],
Y = sample(1:10, 30, replace = TRUE),
X = rep(1:10, 3))

用矩形替换直方图
library(ggplot2)

# You can plot geom_histogram or bar (pre-counted stats)
ggplot(df, aes(X, Y)) +
geom_bar(stat = "identity", position = "dodge") +
facet_grid(State ~ .)
# Or you can plot similar figure with geom_rect
ggplot(df) +
geom_rect(aes(xmin = X - 0.4, xmax = X + 0.4, ymin = 0, ymax = Y)) +
facet_grid(State ~ .)

添加箱线图

要添加箱线图,我们需要:
  • 翻转坐标(函数 coord_flip )
  • geom_rect
  • 中切换 X 和 Y 值

    代码:
    ggplot(df)  +
    geom_rect(aes(xmin = 0, xmax = Y, ymin = X - 0.4, ymax = X + 0.4)) +
    geom_boxplot(aes(X, Y)) +
    coord_flip() +
    facet_grid(State ~ .)

    结果:

    enter image description here

    具有更好视觉效果的最终绘图代码
    ggplot(df)  +
    geom_rect(aes(xmin = 0, xmax = Y, ymin = X - 0.4, ymax = X + 0.4),
    fill = "blue", color = "black") +
    geom_boxplot(aes(X, Y), alpha = 0.7, fill = "salmon2") +
    coord_flip() +
    facet_grid(State ~ .) +
    theme_classic() +
    scale_y_continuous(breaks = 1:max(df$X))

    关于r - 在ggplot2中用直方图叠加箱线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472390/

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