gpt4 book ai didi

r - Base R Bar Plot x 轴偏斜

转载 作者:行者123 更新时间:2023-12-04 11:03:58 26 4
gpt4 key购买 nike

我正在编写一个函数来绘制(例如在 Excel 中称为)特定种类的“组合图”:即条形图 + 折线图。这是我的代码:

plot_combo_chart <- function(df,bar_colour = "green",line_colour = 
"red",y_ticks = 5){

x_name <- colnames(df)[1]
bar_name <- colnames(df)[2]
line_name <- colnames(df)[3]
plot_colours <- c(bar_colour,line_colour)

x_min <- min(df[,1])
x_max <- max(df[,1])
y_min <- min(df[,2],df[,3])
y_max <- max(df[,2],df[,3])

yaxis <- pretty(c(df[,2],df[,3]),n=y_ticks)

par(xpd=FALSE)
bp <- barplot(df[,2],col=bar_colour,axes = FALSE,ann=FALSE)
xaxis <- pretty(df[,1])
xlabs <- df[,1]

lines(x=bp,df[,3], col=line_colour,lwd=2)
axis(side=1,at=xaxis,labels = xaxis,xlim=c(x_min,x_max))
axis(side=2,at=yaxis,labels = yaxis, ylim = c(y_min,y_max))
legend(x=max(bp),y=y_max,legend =
c(bar_name,line_name),col=plot_colours,pch = c(NA,NA),bty='n', lwd=2,
lty=c(0,1),xjust=1,yjust=0,fill=c(bar_colour,NA),
border=c(bar_colour,NA),xpd=TRUE)
title(xlab = x_name)
}

我为该函数生成了一些测试数据:
test <- data.frame(sample = 1:100, value1 = rnorm(100),value2 = runif(100))

当我使用 plot_combo_chart(test) 在测试数据上运行脚本时遇到的问题是 x 轴太短并在大约 20% 的条形仍然在右侧时停止:

enter image description here

我尝试过的事情:
  • 更换 xaxisbp和设置 labels = xlabs在第一
    调用 axis() - 这确实使轴跨越整个图表,但它
    添加太多刻度线;
  • 更换 xaxispretty(bp) - 这给了我适合我的尺寸
    轴和适当间隔的刻度线,但刻度标签不对应
    到我的数据框,最右边的值超过了数据框的最大值;
  • 更换 xaxispretty(bp)和设置labels = pretty(df[,1],n=length(xaxis)-1,min.n=length(xaxis)-1)(必须使用 min.n 参数,否则会引发错误)-
    这种方法的问题是最左边的 x 轴值为 -20,
    远远超出实际范围;

  • 我的想法不多了,但我觉得这是一件简单的事情,所以我必须缺少一个简单的图形参数设置,它会给我我想要的东西。最好的方法是什么?

    谢谢!

    最佳答案

    改成

    bp <- barplot(df[,2], col=bar_colour, space=0, axes = FALSE, ann=FALSE)

    备注 space = 0争论

    需要进行一些其他修改才能实现刻度线相对于条的适当间距 - (如 user2554330 所指出的)
    xaxis <- pretty(df[,1]) - 0.5     # offset values to midpoint of bar
    xlabs <- xaxis + 0.5
    axis(side=1,at=xaxis,labels = xlabs,xlim=c(x_min,x_max)) # you originally had labels = xaxis

    修改后的函数如下
        plot_combo_chart <- function(df,bar_colour = "green",line_colour = 
    "red",y_ticks = 5){

    x_name <- colnames(df)[1]
    bar_name <- colnames(df)[2]
    line_name <- colnames(df)[3]
    plot_colours <- c(bar_colour,line_colour)

    x_min <- min(df[,1])
    x_max <- max(df[,1])
    y_min <- min(df[,2],df[,3])
    y_max <- max(df[,2],df[,3])

    yaxis <- pretty(c(df[,2],df[,3]),n=y_ticks)

    par(xpd=FALSE)
    bp <- barplot(df[,2],col=bar_colour,space=0,axes = FALSE,ann=FALSE)
    xaxis <- pretty(df[,1])-0.5
    xlabs <- xaxis+0.5

    lines(x=bp,df[,3], col=line_colour,lwd=2)
    axis(side=1,at=xaxis,labels = xlabs,xlim=c(x_min,x_max))
    axis(side=2,at=yaxis,labels = yaxis, ylim = c(y_min,y_max))
    legend(x=max(bp),y=y_max,legend =
    c(bar_name,line_name),col=plot_colours,pch = c(NA,NA),bty='n', lwd=2,
    lty=c(0,1),xjust=1,yjust=0,fill=c(bar_colour,NA),
    border=c(bar_colour,NA),xpd=TRUE)
    title(xlab = x_name)
    }

    关于r - Base R Bar Plot x 轴偏斜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415023/

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