【问题标题】:How do I make a Histogram with in R with independent X axis values如何在 R 中制作具有独立 X 轴值的直方图
【发布时间】:2017-03-02 22:27:49
【问题描述】:

(第一次使用 R 用户)所以我试图制作具有不同范围的 x 轴值的重叠直方图,我可以轻松地从 excel 文件中重现。我觉得我走在正确的轨道上,因为它绘制了直方图并在 3 上制作了 x 轴。我似乎无法弄清楚如何让轴(3)采用我想要的 xlim=。下面是我使用的代码和一张图片

## Open Xl Data into R
library(readxl)
dataset <- read_excel("location holder")
View(dataset)
## DLS subsets
Zone_1_DLS <- subset(dataset$DLS, dataset$Zone==1)
Zone_2_DLS <- subset(dataset$DLS, dataset$Zone==2)
Zone_3_DLS <- subset(dataset$DLS, dataset$Zone==3)
## ROP Subsets
Zone_1_ROP <- subset(dataset$DAVG_ROP, dataset$Zone==1)
Zone_2_ROP <- subset(dataset$DAVG_ROP, dataset$Zone==2)
Zone_3_ROP <- subset(dataset$DAVG_ROP, dataset$Zone==3)
## DLS Histograms
DLS1 <- hist(Zone_1_DLS)
DLS2 <- hist(Zone_2_DLS)
DLS3 <- hist(Zone_3_DLS)
## ROP Histograms
ROP1 <- hist(Zone_1_ROP)
ROP2 <- hist(Zone_2_ROP)
ROP3 <- hist(Zone_3_ROP)
## Plot Zone 1 Histograms
plot( ROP1, col=rgb(1,0,0,1), xlim=c(0,300), ylim = c(0,500))
plot( DLS1, axis(3),col=rgb(0,0,1,1), xlim=c(0,10), add = T)
axis(3,xlim=c(0,10))

Picture

【问题讨论】:

  • 你可以使用dput()上传你的数据集吗?
  • @tbradley 太大了,不能粘贴,这里是 onedrive 链接
  • 您应该花一些时间来创建一个最小的工作示例,如下所示:reproducible example
  • 另外,xlim 不是axis 函数的有效参数。你应该改用axis(3, at = c(1:10))
  • @tbradley 我做了一些示例代码,看看这是否有助于解释我的问题,set.seed(42) p1 &lt;- hist(rnorm(500,4)) p2 &lt;- hist(rnorm(500,150)) plot( p1, col=rgb(0,0,1,1/4),xlim=c(0,200)) plot( p2, col=rgb(1,0,0,1/4), add=T) 但是 p1 的范围限制在 (0-10) 之间,因为 p2 不一定有可定义的限制。所以任何时候我xlim=c(0,10) 我都会切断我所有的 p2 数据,当绘制在上面时,所有 p1 数据都是不可用的,因为它在可以是 0-200 的 x 尺度上只有 0-10。

标签: r plot axis


【解决方案1】:

我不确定您是否必须使用您正在寻找的当前格式来获取此图表,但我不建议您这样做,因为它很难阅读并且可能会产生误导。我整理了一种不同的格式,您可以在其中将直方图相互绘制。

这里使用的是您在 cmets 中发布的 rnorm() 值:

set.seed(42) 
p1 <- data.frame(x = rnorm(500,4)) 
p2 <- data.frame(x = rnorm(500,150)) 

p1$cat <- "a"
p2$cat <- "b"


p <- rbind(p1, p2)
p$zone <- c(rep(c(1, 2), 500))


library(ggplot2)
ggplot(p, aes(x = x))+
  facet_grid(zone~cat, scales = "free")+
  geom_histogram(bins = 30)

这将为您提供此图表(a 和 b 分别代表您的 DLS 和 DAVG_ROP 值类型,1 和 2 代表不同的区域):

作为旁注,您将在图形输出中有 3 行,因为您有 3 个区域。

至于您的数据,这应该可以重现与示例类似的内容(我不能 100% 肯定,因为我没有对您的数据进行实际测试,但我相当有信心)。我建议将它们全部保留为一个数据集,就像你最初拥有的那样,只是稍微重新组织一下。

library(dplyr)
library(ggplot2)
df1 <- dataset %>%
  select(DLS, Zone) %>%
  mutate(x = DLS, cat = "DLS") %>%
  select(x, Zone, cat)

df2 <- dataset %>%
  select(DAVG_ROP, Zone) %>%
  mutate(x = DAVG_ROP, cat = "DAVG_ROP")%>%
  select(x, Zone, cat)

df <- rbind(df1, df2)

ggplot(df, aes(x = x))+
  facet_grid(Zone~cat, scales = "free")+
  geom_histogram()

可能有一种更有效/更简洁的方法可以在中间进行整理,但这也有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2012-01-18
    • 2019-04-08
    • 1970-01-01
    • 2015-10-16
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多