【问题标题】:Putting a legend not to overlap a histogram in R在R中放置一个不与直方图重叠的图例
【发布时间】:2018-09-06 19:15:49
【问题描述】:

我想在我的直方图中放置图例而不用重叠线。 我将展示我的 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 代码的结果图片。

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

【问题讨论】:

    标签: r plot histogram legend distribution


    【解决方案1】:

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

    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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      相关资源
      最近更新 更多