我正在尝试使用x轴上的因子生成简单的散点图.结果图显示水平线而不是点(不幸的是无法上传图像).
根据我的教授的要求,根据Dobson,Bennett的" 广义线性模型简介"中的示例3.5,将一些SAS代码转录为R. 目的是向R介绍我的同学,所以我尽量保持这个简单和干净.
dat <- data.frame(age_group = c("30-34", "35-39", "40-44",
"45-49", "50-54", "55-59", "60-64", "65-69"),
deaths = c(1, 5, 5, 12, 25, 38, 54, 65),
population = c(17742, 16554, 16059, 13083, 10784, 9645, 10706, 9933))
dat <- within(dat, {
rate <- deaths / population * 100000
lograte <- log(deaths / population * 100000)
})
Run Code Online (Sandbox Code Playgroud)
而我的情节
with(dat, plot(age_group, lograte, pch=19))
Run Code Online (Sandbox Code Playgroud)
不会产生我想要的'点'.我有一个黑客攻击的解决方案,我稍后会发布,但想看看是否有更好的方法.再一次,道歉我无法上传图片.
使用base R,您可以执行以下操作:
将x轴向后倾斜xaxt="n",然后手动添加。
plot(1:nrow(dat), dat$lograte, xaxt="n", xlab="age_group", ylab="lograte", pch=19)
axis(1, at=1:8, labels=dat$age_group)
Run Code Online (Sandbox Code Playgroud)
您可以使用ggplot2R基本图代替它来实现:
require(ggplot2)
ggplot(dat, aes(x=age_group, y=lograte)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
plotR是R中的泛型函数,这意味着根据其第一个参数的类,可以调用不同的函数.由于您的第一个参数是一个因子,因此调用的函数是plot.factor.来自以下文件plot.factor:
对于数字ya使用boxplot
所以,你得到的是一个盒子图.如果您想避免这种情况,可以转换age_group为数字:
with(dat, plot(as.numeric(age_group), lograte, pch=19))
Run Code Online (Sandbox Code Playgroud)
这可能不会生成您想要的轴,因为标签只能从1到8运行.您可以生成不带x轴的绘图,然后使用第二个命令添加轴:
with(dat, plot(as.numeric(age_group), lograte, pch=19, xaxt = "n", xlab = "age group"))
axis(1, 1:8, dat$age_group)
Run Code Online (Sandbox Code Playgroud)
我还添加了一个轴标签.这给出了以下图: