gpt4 book ai didi

r - 使用 R 中的 multhist 创建具有多个数据系列的直方图

转载 作者:行者123 更新时间:2023-12-04 10:44:09 24 4
gpt4 key购买 nike

我想在同一个图上创建一个包含多个数据系列的直方图。我能找到的最好的方法是 multhist() .我想要一个类似于 hist() 风格的情节, 而同时 ggplot()也可以用来执行这个任务,图形风格不是我想要的。

以下是一些示例数据:

df <- structure(list(year = c(2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L,
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L), count = c(187L, 199L, 560L, 1000L, 850L,
400L, 534L, 911L, 390L, 1008L, 1173L, 1222L, 810L, 950L, 752L,
1125L, 468L, 710L, 290L, 670L, 855L, 614L, 1300L, 950L, 670L,
888L, 490L, 557L, 741L, 700L, 954L, 378L, 512L, 780L, 951L, 398L,
1544L, 903L, 769L, 1399L, 1021L, 1235L, 1009L, 1222L, 255L)), .Names = c("year",
"count"), class = "data.frame", row.names = c(NA, -45L))

这是我到目前为止使用的代码:
require(plotrix)
d2011<-df$count[df$year=="2011"]
d2012<-df$count[df$year=="2012"]
year<-list(d2011,d2012)
mh <- multhist(year, xlab="Count", ylab="Frequency", main="", cex.axis=1, col=c("dark gray", "light gray"), breaks=seq(0,1600, by=200))
box(bty="l", col="black")
legend.text<-c("2011","2012")
legend(locator(1), legend=legend.text, col=c("dark gray", "light gray"), pch=15, bty="n", cex=0.8)

这为我提供了“条形图样式”多直方图,但我在更改两个图形参数时遇到了问题。
  • 我希望图看起来更像直方图而不是条形图,所以首先我想删除(或减少)列之间的空间。我试过使用 space = NULL ,但此命令似乎不适用于 multist
  • 我想更改 x 轴,以便轴刻度线出现在图上的条形之间,并且轴文本与刻度线对齐,而不是位于条形中点。我试过使用 axis(side=1, …) ,但由于 multhist 使用列表对象来创建绘图,这些命令似乎不起作用。

  • 任何建议将不胜感激。也欢迎对其他有用的图形包的建议,这些图形包可以绘制具有多个数据集的直方图。

    最佳答案

    阅读 barplot 的文档了解如何指定零空间:

    multhist(year, xlab="Count", ylab="Frequency", main="", 
    cex.axis=1, col=c("dark gray", "light gray"),
    breaks=seq(0,1600, by=200),
    space=c(0,0), beside=TRUE)

    enter image description here

    这是 ggplot2 和 theme_bw 的示例:
    library(ggplot2)

    ggplot(df, aes(x=count,group=year,fill=as.factor(year))) +
    geom_histogram(position="identity", alpha=0.5, breaks=seq(0,1600, by=200),right=TRUE) +
    scale_fill_discrete(name="Year") +
    theme_bw(base_size=20) +
    xlab("values")

    enter image description here

    或者如果你真的想要它就像 multhist 中的情节一样(这不是那么容易解释):
    ggplot(df, aes(x=count,group=year,fill=as.factor(year))) + 
    geom_histogram(position="dodge", breaks=seq(0,1600, by=200),right=TRUE) +
    scale_fill_discrete(name="Year") +
    theme_bw(base_size=20) +
    xlab("values") +
    scale_x_continuous(breaks=seq(100,1500, by=200))

    enter image description here

    关于r - 使用 R 中的 multhist 创建具有多个数据系列的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17879642/

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