【问题标题】:How can I draw a plot by using cut function in R?如何在 R 中使用 cut 函数绘制绘图?
【发布时间】:2021-06-20 09:38:05
【问题描述】:

这是我需要为 R 解决的问题。我的工作在下面,但我目前找不到我的代码有什么问题。你能帮帮我吗?

当给定x,y对象时,根据x区间值改为区间数据 创建一个绘制不同 y 值的函数 plot_user1。

(1) x 和 y 都作为相同长度的数字向量给出,并且两个向量都是成对的数据。 (2) cut_breaks是用户在将数值向量x分割成截面数据时指定的截面数。由此,在与具有相同区间值的x对应的索引位置绘制y的图表。 因此,绘制的图形数量与 x 的截面数量一样多。 (提示:使用剪切功能) (3) plot_name 用对应的y值表示要绘制的图形的形状。 它具有以下三个值之一:“箱线图”、“直方图”和“散点图”。 (4) color表示图形的颜色

(1) 在一页上绘制y根据x截面值的所有条件图。 (2) 每张图的x轴名称为截面的层级,y轴名称为“y”。 (3)关于图形布局,内边距为c(4,4,2,2),外边距为c(2,2,5,2)。 (4)如果plot_name有上述三个值以外的值, “错误:plot_name 不正确。”输出字符串。 (5) 图集的标题是“条件箱线图(或散点图或 histogram) 的 y|x”,取决于输入的 plot_name 值。 (提示:在 title 函数中使用外部 =TRUE 参数)

plot_user1<-function(x,y,cut_breaks,plot_name,color) {
if(plot_name=="boxplot") {
    plot_name <- boxplot
    txt <- "The conditional boxplot of y|x"
    }
else if (plot_name == "histogram") {plot_name <- hist
    txt <- "The conditional histogram of y|x"
    }
else if (plot_name == "scatter plot") {plot_name <- plot
    txt <- "The conditional scatter plot of y|x"
    }
else {print("Errors: The plot_name is incorrect.")}
a<-cut(x,cut_breaks)
for (i in 1: cut_breaks) {
    plot_name(a,y,col=color,xlab=levels(a),ylab="y")
    title(main=txt, outer=TRUE)
    par(mar=c(4,4,2,2))
    par(oma=c(2,2,5,2))
}

} enter image description here

我要画的情节应该是这样的。

【问题讨论】:

  • 实际问题是什么?在将 x 轴切割成包含因子的数组后,您是否试图获得散点图?
  • 根据我们在 plot_name 中输入的内容,该图可以是箱线图、直方图或散点图
  • 一旦x变量为cut,调用plot函数时结果会产生箱形图,调用hist函数时会出错。唯一可行的选项是boxplot。代码中的 for 循环绘制了 3 次相同的内容。
  • 那我怎样才能做几个情节呢?
  • 您必须遍历 a 变量的所有可能级别,并且您需要过滤数据,以便每个级别仅包含当前 a 级别的 x 和 y 值阴谋。您还需要弄清楚如何绘制多个图形,以免它们相互覆盖。更根本的是,您应该发布 xy 数据的示例(使用 dput(x) 并将结果包含在原始问题中)。值得先做plot(x,y),然后是hist(x,y),最后是boxplot(x,y),因为这可能会揭示一些错误。

标签: r plot cut


【解决方案1】:

我不太确定我是否理解正确,但这给出了预期的情节,

plot_user1<-function(x,y,cut_breaks,plot_name,color) {
    if(plot_name=="boxplot") {
        plot_name <- boxplot
        txt <- "The conditional boxplot of y|x"
        }
    else if (plot_name == "histogram") {plot_name <- hist
        txt <- "The conditional histogram of y|x"
        }
    else if (plot_name == "scatter plot") {plot_name <- plot
        txt <- "The conditional scatter plot of y|x"
        }
    else {print("Errors: The plot_name is incorrect.")}

    a<-cut(x,cut_breaks)
    par(mfrow=c(1,cut_breaks))


    for (i in levels(a)) {

        plot_name(y[levels(a)==i],col=color,xlab=i,ylab="y")
        title(main=txt, outer=TRUE)
    
    }
}

【讨论】:

  • 非常感谢!!我认为它也给出了预期的情节!但水平与我发布的略有不同。为什么这有点不同?
  • 源于随机选取的数据集。 xy 是随机创建的,这使得它们因计算机而异,除非您没有定义 set.seed()
  • 非常感谢soso的帮助!!真的帮了大忙!!哦,对于内边距和外边距,我可以像 par(mfrow=c(1,cut_breaks),mar=c(4,4,2,2),oma=c(2,2,5, 2))?
  • 对不起,我之前没用过。所以我不确定。顺便说一句,如果这篇文章回答了你的问题,你可以接受它来关闭它。这是link,看看你可以如何处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
相关资源
最近更新 更多