【问题标题】:How to Draw a Plot in R Which is Not a Box-and-Whiskers Plot如何在 R 中绘制不是盒须图的图
【发布时间】:2016-09-23 04:31:27
【问题描述】:

我有一个大型数据集,其中包含如下数据:

      Age          Ethnicity          Gender        Crude_Rate 
      20-24        Pacific Islander   Female        39.2   
      55-59        Caucasian          Male          100.3
      60-64        African            Female        3.2
      30-34        Asian              Male          2.8

我正在尝试在 R 上绘制三个图:

  • 相对于年龄的粗率(始终是 y 轴)
  • 针对种族的粗率
  • 相对于性别的粗率

我得到了图,但它是一个盒须图,上面有点,这不是我想要的。我只想绘制点,即散点图。

我使用的代码是:

melanoma <-read.csv("Melanoma Age.csv", header=TRUE, na.strings = c("Not     Applicable"))
melanoma<-na.omit(melanoma)


plot(melanoma$Gender, melanoma$Crude_Rate,las=2, ylab="Crude Rate",    xlab="Gender", main="Crude Rates for Both Genders")
plot(melanoma$Age, melanoma$Crude_Rate,las=2, ylab="Crude Rate", main="Crude Rates for Different Age Groups")
plot(melanoma$Ethnicity, melanoma$Crude_Rate,las=2, ylab="Crude Rate", main="Crude Rates for Different Ethnicities")

我不明白我做错了什么,因为通常当我这样做时,我会得到一个散点图,而不是上面有点的盒须图。

感谢您的任何帮助

【问题讨论】:

  • 当 y 是一个因子时,R 倾向于绘制箱线图。如果您需要散点图,请尝试在不使用 y 轴但指定不同颜色或点形状的情况下进行绘图,即使用像 plot(melanoma$Crude_Rate, col = melanoma$Gender, ...) 这样的 smth,其中 ... 代表任何其他绘图参数。另一个建议是使用数据子集并将它们绘制在不同的图表上。
  • @Dmitry Grekov 谢谢,我试过 plot(melanoma$Crude_Rate, col = melanoma$Gender) 现在我得到了一个散点图,但不幸的是 x 轴标签不是女性和男性的数字。
  • 纵轴现在是 Crude_Rate 并且水平标签只是观察的索引。您可以使用legend() 指定用某种颜色绘制的性别。
  • 这是一个不错的图表,但不幸的是,我希望将年龄、性别和种族分别作为三个图表的横轴(x 轴)

标签: r plot dataset


【解决方案1】:

您还可以使用 car 包和函数散点图。这将在图表上为您提供额外的内容(例如框和胡须以及平滑器),但这些可以很容易地删除。

【讨论】:

  • 谢谢你
【解决方案2】:

如果您的 x 值是因子变量,则可以生成如下散点图:

#a reproducible example
set.seed(42)
x <- factor(sample(c("A", "B"), 20, TRUE))
y <- rnorm(20)

#use plot.default explicitly to avoid using plot.factor implicitly
plot.default(y ~ x, type = "p", 
             xlim = range(as.integer(unique(x))) + c(-0.4, 0.4), 
             xaxt = "n")
axis(1, at = seq_along(levels(x)), labels = levels(x))

【讨论】:

  • 嗨罗兰。谢谢你。抱歉,我对 R 还很陌生。我需要做些什么来更改我的数据的代码?
  • plot.default(Crude_rate ~ Gender, data = melanoma, xlim = range(as.integer(unique(melanoma$Gender))) + c(-0.4, 0.4)...)
  • 谢谢,所以我需要在 plot.default(Cru​​de_Rate ~ Gender, data = melanoma, xlim = range(as.integer(unique(melanoma$Gender))) + c( -0.4, 0.4))?
【解决方案3】:

我将尝试向您展示如何绘制粗率与年龄的关系。同样,您可以绘制其他图。为简单起见,我逐步展示了创建过程

input = NULL
input$Age = rep(c("20-24","55-59","60-64","30-34"),4)
input$Crude_Rate = runif(16)
input = as.data.frame(input)

library(dplyr)
Byage <- input %>% 
        group_by(Age) %>% 
        summarise(n = n(), Crude_Rate = mean(Crude_Rate))
plot1 <-ggplot(input, aes(Age, Crude_Rate))
plot1 <-plot1 + geom_jitter(width = 0.5)
plot1 <-plot1 + geom_point(data = Byage, colour = "red", size = 4)
plot1 <-plot1 + geom_text(aes(y = -0.1, label = paste0("n = ", n)), Byage, size = 3)

这将生成一个漂亮的散点图,其中年龄组作为 x 轴,Crude_Rate 作为 y 轴,每个组中的样本数位于底部。

ScatterPlot of Age vs Crude_Rate with each age group mean Information

【讨论】:

  • 谢谢!不幸的是,我在尝试时遇到了很多错误。
  • 您能否详细说明您遇到的错误。您需要安装并加载 ggplot2 库才能使用上述代码。
  • 成功了,我只需要输入$Crude_Rate = runif(361) 因为我有以下类别: input$Age = rep(c("
  • 谢谢 :) 不幸的是,因为我的数据集太大,它变得有点混乱。您知道如何将其制成直方图,并将粗利率相加吗?
猜你喜欢
  • 2021-09-23
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多