在 R 中重现直方图的样式
Reproducing the style of a histogram plot in R
我正在尝试使用以下数据集在 R 中重现直方图:
ages <- c(26, 31, 35, 37, 43, 43, 43, 44, 45, 47, 48, 48, 49, 50, 51, 51, 51, 51, 52, 54, 54, 54, 54,
55, 55, 55, 56, 57, 57, 57, 58, 58, 58, 58, 59, 59, 62, 62, 63, 64, 65, 65, 65, 66, 66, 67,
67, 72, 86)
我想要一个看起来尽可能接近这个的直方图:
但是,我遇到了三个问题:
- 我无法让 y-axis 的频率计数达到 18
- 我没能在 x-axis
上找到波浪形的中断符号
- 我的休息时间似乎没有正确设置为我在代码中输入的矢量
我仔细阅读了 ?hist
,认为前两个问题可以通过设置 xlim
和 ylim
来解决,但这似乎不起作用。
我对第三期不知所措,因为我认为可以通过包括 breaks = c(25.5, 34.5, 43.5, 52.5, 61.5, 70.5, 79.5, 88.5)
.
来完成
到目前为止,这是我的代码:
hist(ages, breaks = c(25.5, 34.5, 43.5, 52.5, 61.5, 70.5, 79.5, 88.5),
freq=TRUE, col = "lightblue", xlim = c(25.5, 88.5), ylim = c(0,18),
xlab = "Age", ylab = "Frequency")
后面是我对应的直方图:
感谢任何正确方向的碰撞。
1。达到 18 岁。
看来在您的数据中您最多有 17 个数字属于 52.5 和 61.5 之间的类别。这甚至是两边的开区间:
ages <- c(26, 31, 35, 37, 43, 43, 43, 44, 45, 47, 48, 48, 49, 50, 51, 51, 51,
51, 52, 54, 54, 54, 54, 55, 55, 55, 56, 57, 57, 57, 58, 58, 58, 58,
59, 59, 62, 62, 63, 64, 65, 65, 65, 66, 66, 67, 67, 72, 86
)
sum(ages >= 52.5 & ages <= 61.5)
[1] 17
所以你的直方图只反映了这一点。
2。中断符号。
因此您可能对 THIS SO ANSWER
感兴趣
3。休息。
如果您阅读 help(hist)
,您会看到中断指定了组的形成点:
... * a vector giving the breakpoints between histogram cells
所以你按预期中断了工作。您遇到的问题是在 x 轴上显示相同的数字。这里ANOTHER SO ANSWER可能对你有帮助。
例子
这里是重现情节的方法。
library(plotrix) # for the break on x axis
library(shape) # for styled arrow heads
# manually select axis ticks and colors
xticks <- c(25.5, 34.5, 43.5, 52.5, 61.5, 70.5, 79.5, 88.5)
yticks <- seq(2, 18, 2)
bgcolor <- "#F2ECE4" # color for the background
barcolor <- "#95CEEF" # color for the histogram bars
# top level parameters - background color and font type
par(bg=bgcolor, family="serif")
# establish a new plotting window with a coordinate system
plot.new()
plot.window(xlim=c(23, 90), ylim=c(0, 20), yaxs="i")
# add horizontal background lines
abline(h=yticks, col="darkgrey")
# add a histogram using our selected break points
hist(ages, breaks=xticks, freq=TRUE, col=barcolor, xaxt='n', yaxt='n', add=TRUE)
# L-shaped bounding box for the plot
box(bty="L")
# add x and y axis
axis(side=1, at=xticks)
axis(side=2, at=yticks, labels=NA, las=1, tcl=0.5) # for inward ticks
axis(side=2, at=yticks, las=1)
axis.break(1, 23, style="zigzag", bgcol=bgcolor, brw=0.05, pos=0)
# add labels
mtext("Age", 1, line=2.5, cex=1.2)
mtext("Frequency", 2, line=2.5, cex=1.2)
# add arrows
u <- par("usr")
Arrows(88, 0, u[2], 0, code = 2, xpd = TRUE, arr.length=0.25)
Arrows(u[1], 18, u[1], u[4], code = 2, xpd = TRUE, arr.length=0.25)
和图片:
我正在尝试使用以下数据集在 R 中重现直方图:
ages <- c(26, 31, 35, 37, 43, 43, 43, 44, 45, 47, 48, 48, 49, 50, 51, 51, 51, 51, 52, 54, 54, 54, 54,
55, 55, 55, 56, 57, 57, 57, 58, 58, 58, 58, 59, 59, 62, 62, 63, 64, 65, 65, 65, 66, 66, 67,
67, 72, 86)
我想要一个看起来尽可能接近这个的直方图:
但是,我遇到了三个问题:
- 我无法让 y-axis 的频率计数达到 18
- 我没能在 x-axis 上找到波浪形的中断符号
- 我的休息时间似乎没有正确设置为我在代码中输入的矢量
我仔细阅读了 ?hist
,认为前两个问题可以通过设置 xlim
和 ylim
来解决,但这似乎不起作用。
我对第三期不知所措,因为我认为可以通过包括 breaks = c(25.5, 34.5, 43.5, 52.5, 61.5, 70.5, 79.5, 88.5)
.
到目前为止,这是我的代码:
hist(ages, breaks = c(25.5, 34.5, 43.5, 52.5, 61.5, 70.5, 79.5, 88.5),
freq=TRUE, col = "lightblue", xlim = c(25.5, 88.5), ylim = c(0,18),
xlab = "Age", ylab = "Frequency")
后面是我对应的直方图:
感谢任何正确方向的碰撞。
1。达到 18 岁。
看来在您的数据中您最多有 17 个数字属于 52.5 和 61.5 之间的类别。这甚至是两边的开区间:
ages <- c(26, 31, 35, 37, 43, 43, 43, 44, 45, 47, 48, 48, 49, 50, 51, 51, 51,
51, 52, 54, 54, 54, 54, 55, 55, 55, 56, 57, 57, 57, 58, 58, 58, 58,
59, 59, 62, 62, 63, 64, 65, 65, 65, 66, 66, 67, 67, 72, 86
)
sum(ages >= 52.5 & ages <= 61.5)
[1] 17
所以你的直方图只反映了这一点。
2。中断符号。
因此您可能对 THIS SO ANSWER
感兴趣3。休息。
如果您阅读 help(hist)
,您会看到中断指定了组的形成点:
... * a vector giving the breakpoints between histogram cells
所以你按预期中断了工作。您遇到的问题是在 x 轴上显示相同的数字。这里ANOTHER SO ANSWER可能对你有帮助。
例子
这里是重现情节的方法。
library(plotrix) # for the break on x axis
library(shape) # for styled arrow heads
# manually select axis ticks and colors
xticks <- c(25.5, 34.5, 43.5, 52.5, 61.5, 70.5, 79.5, 88.5)
yticks <- seq(2, 18, 2)
bgcolor <- "#F2ECE4" # color for the background
barcolor <- "#95CEEF" # color for the histogram bars
# top level parameters - background color and font type
par(bg=bgcolor, family="serif")
# establish a new plotting window with a coordinate system
plot.new()
plot.window(xlim=c(23, 90), ylim=c(0, 20), yaxs="i")
# add horizontal background lines
abline(h=yticks, col="darkgrey")
# add a histogram using our selected break points
hist(ages, breaks=xticks, freq=TRUE, col=barcolor, xaxt='n', yaxt='n', add=TRUE)
# L-shaped bounding box for the plot
box(bty="L")
# add x and y axis
axis(side=1, at=xticks)
axis(side=2, at=yticks, labels=NA, las=1, tcl=0.5) # for inward ticks
axis(side=2, at=yticks, las=1)
axis.break(1, 23, style="zigzag", bgcol=bgcolor, brw=0.05, pos=0)
# add labels
mtext("Age", 1, line=2.5, cex=1.2)
mtext("Frequency", 2, line=2.5, cex=1.2)
# add arrows
u <- par("usr")
Arrows(88, 0, u[2], 0, code = 2, xpd = TRUE, arr.length=0.25)
Arrows(u[1], 18, u[1], u[4], code = 2, xpd = TRUE, arr.length=0.25)
和图片: