How to plot deviation from mean

半城伤御伤魂 提交于 2019-12-07 18:35:12

问题


In R I have created a simple matrix of one column yielding a list of numbers with a set mean and a given standard deviation.

rnorm2 <- function(n,mean,sd) { mean+sd*scale(rnorm(n)) }
r <- rnorm2(100,4,1)

I now would like to plot how these numbers differ from the mean. I can do this in Excel as shown below:

But I would like to use ggplot2 to create a graph in R. in the Excel graph I have cheated by using a line graph but if I could do this as columns it would be better. I have tried using a scatter plot but I cant work out how to turn this into deviations from the mean.


回答1:


Perhaps you want:

rnorm2 <- function(n,mean,sd) { mean+sd*scale(rnorm(n)) }
set.seed(101)
r <- rnorm2(100,4,1)
x <- seq_along(r)  ## sets up a vector from 1 to length(r)
par(las=1,bty="l") ## cosmetic preferences
plot(x, r, col = "green", pch=16) ## draws the points
## if you don't want points at all, use 
##    plot(x, r, type="n")  
## to set up the axes without drawing anything inside them
segments(x0=x, y0=4, x1=x, y1=r, col="green") ## connects them to the mean line
abline(h=4)

If you were plotting around 0 you could do this automatically with type="h":

plot(x,r-4,type="h", col="green")

To do this in ggplot2:

library("ggplot2")
theme_set(theme_bw()) ## my cosmetic preferences
ggplot(data.frame(x,r))+
    geom_segment(aes(x=x,xend=x,y=mean(r),yend=r),colour="green")+
    geom_hline(yintercept=mean(r))



回答2:


Ben's answer using ggplot2 works great, but if you don't want to manually adjust the line width, you could do this:

# Half of Ben's data
rnorm2 <- function(n,mean,sd) { mean+sd*scale(rnorm(n)) }
set.seed(101)
r <- rnorm2(50,4,1)
x <- seq_along(r)  ## sets up a vector from 1 to length(r)

# New variable for the difference between each value and the mean
value <- r - mean(r)

ggplot(data.frame(x, value)) +
  # geom_bar anchors each bar at zero (which is the mean minus the mean)
  geom_bar(aes(x, value), stat = "identity"
           , position = "dodge", fill = "green") +
  # but you can change the y-axis labels with a function, to add the mean back on
  scale_y_continuous(labels = function(x) {x + mean(r)})




回答3:


in base R it's quite simple, just do

plot(r, col = "green", type = "l")
abline(4, 0)

You also tagged ggplot2, so in that case it will be a bit more complicated, because ggplot requires creating a data frame and then melting it.

library(ggplot2)
library(reshape2)
df <- melt(data.frame(x = 1:100, mean = 4, r = r), 1)
ggplot(df, aes(x, value, color = variable)) +
  geom_line()



来源:https://stackoverflow.com/questions/27806632/how-to-plot-deviation-from-mean

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!