放置一个图例不与 R 中的直方图重叠

Putting a legend not to overlap a histogram in R

我想在我的直方图中放置图例而不重叠线条。 我将展示我的 R 代码和直方图。

#Installing 'readxl' to load a xlsx file    
install.packages("readxl")
library(readxl)

#Loading xlsx file
value <- read_excel("C:/Users/user/Desktop/value.xlsx")

#Setting 'graph' vector
graph <- hist(value$value)

#Calculating 'frequency percentage'
graph$density <- graph$counts / sum(graph$counts) * 100

#Drawing a histogram
plot(graph, main = "Title", xlab = "x-axis", ylab = "Frequency(%)", ylim = c(0, 100), breaks = "Sturges", col = "Gray", freq = FALSE, xaxt = "n")
axis(side = 1, at = seq(-8, 8, by =2))

#Plotting a frequency(%) polygon on the histogram(I have no idea how to draw smooth curve; thus, I used 'line() function')
lines(x = graph$mids, y =graph$density, type = "l", lty = 6, col = "Red")

#Putting a legend on the topright of the graph
legend("topright", c("The distribution of frequency(%)", "mean", "±2SD"), col = c("Red", "Black", "Black"), lty = c(6, 1, 2), lwd = c(2, 1, 1))

#Computing mean and standard deviations
m <- mean(value$value)
std <- sd(value$value)

#Plotting mean and ±2SD values
abline(v = m, lty = 1)
abline(v = m + 2*std, lty = 2)
abline(v = m - 2*std, lty = 2)

顺便说一句,图例重叠在直方图上。这是R代码结果的图片。

我可以把图例放在另一个不与图表重叠的区域吗? 我需要你的帮助,非常感谢你。

这取决于您希望图例出现的位置。这是一个位于标题右侧的示例:

value <- rnorm(1000)
graph <- hist(value, breaks="Sturges", main = "Title", xlab = "x-axis", ylab = "Frequency(%)", col = "Gray", freq = FALSE, xaxt = "n")
axis(side = 1, at = seq(-8, 8, by =2))

#Plotting a frequency(%) polygon on the histogram(I have no idea how to draw smooth curve; thus, I used 'line() function')
lines(x = graph$mids, y = graph$density, type = "l", lty = 6, col = "Red")

#Putting a legend on the topright of the graph
legend("bottomright", c("The distribution of frequency(%)", "mean", "±2SD"),
       col = c("Red", "Black", "Black"), lty = c(6, 1, 2), lwd = c(2, 1, 1),
       xpd=TRUE, inset=c(0,1), cex=0.7, bty='n'
       )

#Computing mean and standard deviations
m   <- mean(value)
std <- sd(value)

#Plotting mean and ±2SD values
abline(v = m + c(0, 2*std, -2*std), lty=c(1,2,2))

请注意,我只在图例中添加了 xpdinsetcexbty 参数。前两个最重要:xpd 允许您在页边距的绘图区域外绘制图例,inset 控制图例位置的调整。您可以在 help(legend).

中了解更多相关信息

这是结果图:

您可以在此处查看更多示例和解释:Plot a legend outside of the plotting area in base graphics?