- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用ggplot
绘制直方图(或使用 stat_bin
绘制阶梯图)并使用 geom_point
在其上叠加几个点.
这是一个 base
执行:
library(plotrix)
set.seed(10)
df <- data.frame(id=LETTERS,val=rnorm(length(LETTERS)))
selected.ids <- sample(LETTERS,3,replace=F)
h <- hist(df$val,plot=F,breaks=10)
cols <- sapply(rainbow(length(selected.ids)),function(x) color.id(x)[1])
selected.df <- data.frame(id=selected.ids,col=cols,stringsAsFactors=F)
selected.df$x <- df$val[which(df$id %in% selected.ids)]
selected.df <- selected.df[order(selected.df$x),]
selected.df$y <- h$counts[findInterval(selected.df$x,h$breaks)]
selected.df$col <- factor(selected.df$col,levels=cols)
plot(h)
segments(x0=selected.df$x,x1=selected.df$x,y0=selected.df$y,y1=selected.df$y,cex=18,lwd=8,col=selected.df$col)
ggplot
:
ggplot(df,aes(x=val))+geom_histogram(bins=10,colour="black",alpha=0,fill="#FF6666")+geom_point(data=selected.df,aes(x=x,y=y,colour=factor(col)),size=2)+scale_fill_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")+scale_colour_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")
ggplot(df,aes(x=val))+stat_bin(geom="step",bins=10)+geom_point(data=selected.df,aes(x=x,y=y,colour=factor(col)),size=2)+scale_fill_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")+scale_colour_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")
geom_histogram
最佳答案
您的 selected.df
的 y.values
由 breaks
制成hist()
使用,但 geom_histogram()
使用另一个 breaks
. ( geom_histogram(bins)
不等于 hist(breaks)
只是为了确定)。此外,在阶梯图中,上下发生在其 breaks
的中间值上。 . ggplot_build(gg.obj)$data
(或 plot(gg.obj)$data
)为您提供一些信息、中断、计数等。
geom_histgram
方式与base.plot
基本一致.如果您想要与 base.plot
相同的输出, 请使用 breaks = h$breaks
而不是 bars = 10
.
# a common part to base and ggplot2
library(plotrix)
set.seed(10)
df <- data.frame(id = LETTERS, val = rnorm(length(LETTERS)))
selected.ids <- sample(LETTERS, 3, replace = F)
cols <- sapply(rainbow(length(selected.ids)), function(x) color.id(x)[1])
selected.df <- data.frame(id=selected.ids, col=cols, stringsAsFactors = F)
selected.df$x <- df$val[which(df$id %in% selected.ids)]
selected.df <- selected.df[order(selected.df$x),]
selected.df$col <- factor(selected.df$col, levels=cols)
# (1) make a histogram
g <- ggplot(df, aes(x = val)) + geom_histogram(bins = 10, colour = "black", alpha = 0, fill = "#FF6666")
# base; h <- hist(df$val, plot = F, breaks = 10)
# (2) get its breaks
g.data <- ggplot_build(g)$data[[1]]
g.breaks <- c(g.data$xmin, tail(g.data$xmax, n=1))
# base; h$breaks
# (3) get counts of specific x values
selected.df$y <- g.data$count[findInterval(selected.df$x, g.breaks)]
# base; selected.df$y <- h$counts[findInterval(selected.df$x,h$breaks)]
# (4) draw
g + geom_point(data = selected.df, aes(x = x, y = y, colour = factor(col)), size = 2) +
scale_fill_manual(values = levels(selected.df$col), labels = selected.df$id,name = "id") +
scale_colour_manual(values = levels(selected.df$col), labels = selected.df$id, name = "id")
geom_histgram
一样的方法来画它.重要的一点是上下发生的不是休息而是中间值。
selected.df2 <- selected.df
# (1) make a step plot
s <- ggplot(df, aes(x = val)) + stat_bin(geom = "step", bins = 10)
# (2) get breaks and its middle values
s.data <- ggplot_build(s)$data[[1]]
s.breaks <- c(s.data$xmin, tail(s.data$xmax, n=1))
s.mid.breaks <- s.data$x
# (3) get counts of specific x values using middle values of breaks.
selected.df2$y <- s.data$count[findInterval(selected.df2$x, s.mid.breaks)]
# (4) add a new levels into breaks to start and end at y=0
s.add.breaks <- c(s.breaks[1] - 1.0E-6, # making lower levels is easy
s.breaks,
tail(s.breaks, n=1) + diff(s.breaks[1:2])) # upper need the same range
# (5) draw
ggplot(df, aes(x = val)) + stat_bin(geom = "step", breaks = s.add.breaks) +
geom_point(data = selected.df2, aes(x = x, y = y, colour = factor(col)), size = 2) +
scale_fill_manual(values = levels(selected.df2$col), labels = selected.df2$id, name = "id") +
scale_colour_manual(values = levels(selected.df2$col), labels = selected.df2$id, name="id")
关于r - 在 geom_histogram 或 stat_bin 上叠加 geom_points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39651126/
对于因子变量,stat_bin 中的密度图似乎无法按预期工作。 y 轴上每个类别的密度为 1。 例如,使用钻石数据: diamonds_small <- diamonds[sample(nrow(di
构建直方图后,我想为我的绘图添加一个上边界/轮廓。我不想使用 geom_bar或 geom_col因为我不想要每个箱子的垂直边界。 我的尝试包括使用 geom_histogram和 stat_bin(
我需要绘制一个包含多个具有不同 bin 大小配置的直方图的图。为此,我使用了几个 stat_bin 层。情节没问题,但我不知道如何添加将每个直方图名称与填充颜色连接起来的图例。 我一直在尝试几种选择,
我将数据作为有序因子,级别为 1、2、3、4、5。 (这是李克特量表数据。)我想使用 ggplot 创建计数条形图,但这必须包括所有级别,甚至是计数为零的级别。这是一个在级别等于 2 时计数为零的示例
我想用上面的数据做一个直方图,数据显示了某个国家的人均收入。使用这个命令我不断得到那个 Error: stat_bin() must not be used with a y aesthetic. i
我想用ggplot绘制直方图(或使用 stat_bin 绘制阶梯图)并使用 geom_point 在其上叠加几个点. 这是一个 base执行: library(plotrix) set.seed(10
我的表是 data.combined 与以下结构: 'data.frame': 1309 obs. of 12 variables: $ Survived: Factor w/ 3 level
我正在尝试使用 ggplot2 中的 stat_bin 函数按月对几年观察中的时间序列数据进行分类。代码如下所示: month.breaks<-seq.Date(from=min(afg$DateOc
我是一名优秀的程序员,十分优秀!