我使用的直方图有两个问题:我正在尝试使用函数hist()
在R中生成直方图,以用于数值(间隔)变量的频率分布,范围从0到10。我要绘制的图应生成11条。但是:
问题1:我的好朋友R不断绘制10条。
问题2:此外,我不知道如何以正确的方式绘制“ x”刻度值:在每个小节下方,“ x”中的类别值(即从0到10)。正如您在下面的代码中看到的那样,我尝试使用axis()
,但是我不知道如何设置它。
我很确定这是很基本的东西,但是我找不到这两个问题的解决方案。为了解决第一个问题,我认为设置breaks=11
可以解决问题,但是没有用。我不知道如何解决第二个问题。
这是我的数据(一项研究的128位参与者,每个参与者的得分在0到10之间):
structure(list(ID_Esc_Def = c(915151L, 91494L, 1303553L, 1310117L,
1305411L, 1312263L, 1310121L, 1312264L, 1306498L, 1305413L, 1306497L,
1307521L, 1305409L, 1307523L, 1306491L, 1311366L, 1307532L, 915155L,
917111L, 915152L, 917120L, 1312267L, 1310119L, 1310114L, 1305414L,
1305412L, 1306494L, 1303559L, 1307526L, 917112L, 91496L, 1305410L,
1307527L, 917113L, 1307529L, 91491L, 1306495L, 1311363L, 1306493L,
1312260L, 1306496L, 91493L, 1303561L, 915153L, 1310118L, 1307530L,
1303557L, 1310113L, 1303556L, 1312259L, 1312258L, 91498L, 1311361L,
1311367L, 1311365L, 1306499L, 1312262L, 915149L, 915148L, 91492L,
1310120L, 1308168L, 1312266L, 1308167L, 1306492L, 1307531L, 1305408L,
1307514L, 1310116L, 1310112L, 1306490L, 1307525L, 1310115L, 1308174L,
1311368L, 915157L, 1312261L, 1308169L, 1312265L, 91495L, 1311360L,
1305417L, 91489L, 915154L, 1303555L, 91497L, 917118L, 131389L,
521390L, 521389L, 915150L, 131386L, 1305415L, 1311362L, 521386L,
131382L, 91490L, 521391L, 1305416L, 1303562L, 1311369L, 917116L,
521388L, 917114L, 1303558L, 521396L, 521387L, 1308172L, 131388L,
521395L, 131390L, 131384L, 917117L, 1311364L, 131387L, 1308173L,
917119L, 131385L, 917115L, 915156L, 521393L, 1308171L, 1308170L,
1303560L, 521392L, 131391L, 131383L, 1303554L), asig_dic = c(0L,
10L, 2L, 4L, 5L, 6L, 5L, 1L, 5L, 10L, 4L, 3L, 4L, 5L, 7L, 6L,
5L, 4L, 3L, 2L, 4L, 6L, 1L, 3L, 5L, 5L, 3L, 3L, 7L, 0L, 3L, 5L,
2L, 2L, 4L, 3L, 2L, 5L, 5L, 7L, 5L, 6L, 0L, 5L, 10L, 6L, 3L,
5L, 5L, 6L, 10L, 5L, 5L, 8L, 10L, 5L, 2L, 5L, 4L, 3L, 1L, 2L,
5L, 4L, 5L, 7L, 5L, 3L, 5L, 5L, 7L, 7L, 1L, 1L, 2L, 5L, 0L, 3L,
5L, 3L, 5L, 10L, 4L, 0L, 1L, 5L, 5L, 5L, 5L, 5L, 6L, 10L, 4L,
6L, 1L, 9L, 4L, 4L, 5L, 5L, 6L, 5L, 1L, 5L, 1L, 2L, 2L, 0L, 5L,
5L, 6L, 6L, 5L, 3L, 5L, 3L, 3L, 5L, 5L, 6L, 4L, 2L, 2L, 0L, 4L,
6L, 5L, 5L)), class = "data.frame", row.names = c(NA, -128L))
这是我用来生成直方图的代码:
m<-mean(dictator$asig_dic)
std<-sqrt(var(dictator$asig_dic))
quartz()
par(mfrow=c(1,1))
par(las=1)
hist(dictator$asig_dic, breaks = 11, col = "grey", freq = F, ylim=c(0,0.4), xaxt="n",
xlab="Generosity (Donated Tokens in DG)", ylab="Relative Frequency", main="")
curve(dnorm(x, mean=m, sd=std),
col="darkblue", lwd=2, add=TRUE, yaxt="n")
axis(1, at = seq(0, 10, by = 1), las=1)
如您所见,有10条。有帮助吗?
祝一切顺利,
毛里西奥。
答案 0 :(得分:1)
一种解决方案是喝ggplot2
库尔援助。如您所见,有11个垃圾箱(根据要求),标签位于条形图的中心。
library(ggplot2)
library(ggthemes)
ggplot(dictator) +
geom_histogram(aes(x = asig_dic, y = (..count..)/sum(..count..)),
bins = 11, fill = "gray", colour = "black") +
stat_function(fun = dnorm,
args = list(mean = mean(dictator$asig_dic),
sd = sd(dictator$asig_dic)),
colour = "salmon", size = 1.25) +
theme_tufte() +
theme(axis.line = element_line(size = 1),
axis.text = element_text(size = 18),
axis.title = element_text(size = 20)) +
xlab("Generosity (Donated Tokens in DG)") +
ylab("Relative Frequency") +
scale_x_continuous(breaks = 0:10)
答案 1 :(得分:0)
正如@Lyngbakr所说,由于breaks
中的hist()
参数使用pretty
值,因此您不会得到11个bin。 pretty
值的问题在于选择它们的值是1,2或5的10的幂。因此,您只会得到10个bin,而不是11。要“战斗”,一种方法是使用更多不必要的垃圾箱(例如breaks = seq(-1, 10, 1)
或breaks = seq(0, 10, 0.5)
)。但是,它可能会“破坏”您的图形。
您可以向here寻求有关pretty
值的帮助,而可以向here寻求更深入的解释。
如果您仍然想使用base R
(而不是ggplot2
之类的其他软件包),则可以执行以下操作:
par(mfrow=c(1,1))
par(las=1)
hist(dictator$asig_dic,
breaks = seq(-1, 10, 1),
col = "grey", freq = F, ylim=c(0,0.4), xaxt="n",
xlab="Generosity (Donated Tokens in DG)", ylab="Relative Frequency", main="")
curve(dnorm(x, mean=m, sd=std),
col="darkblue", lwd=2, add=TRUE, yaxt="n")
axis(1, at = seq(-1, 11, by = 1), las=1)