放置一个图例不与 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))
请注意,我只在图例中添加了 xpd
、inset
、cex
和 bty
参数。前两个最重要:xpd
允许您在页边距的绘图区域外绘制图例,inset
控制图例位置的调整。您可以在 help(legend)
.
中了解更多相关信息
这是结果图:
您可以在此处查看更多示例和解释:Plot a legend outside of the plotting area in base graphics?
我想在我的直方图中放置图例而不重叠线条。 我将展示我的 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))
请注意,我只在图例中添加了 xpd
、inset
、cex
和 bty
参数。前两个最重要:xpd
允许您在页边距的绘图区域外绘制图例,inset
控制图例位置的调整。您可以在 help(legend)
.
这是结果图:
您可以在此处查看更多示例和解释:Plot a legend outside of the plotting area in base graphics?