假设我有以下数据集:
set.seed(seed=10)
n <- 10000
s.data <- data.frame(score = rnorm(n,500,100),
gender = sample(c("Male","Female"),size=n,replace=T,prob=c(.4,.6)),
major = sample(c("A","B","C","D"),size=n,replace=T,prob=c(.02,.25,.05,.68)))
Run Code Online (Sandbox Code Playgroud)
我创建以下直方图:
require(ggplot2)
ggplot(s.data, aes(x=score)) + facet_wrap(~ major) +
geom_histogram(binwidth=50,colour="black", fill="white")
Run Code Online (Sandbox Code Playgroud)
由于我想了解有关主要A和C的更多细节,我绘制了一个密度直方图:
ggplot(s.data, aes(x=score)) + facet_wrap(~ major) +
geom_histogram(binwidth=50,aes(y = ..density..),colour="black", fill="white")
Run Code Online (Sandbox Code Playgroud)
完美到现在为止.
当我尝试使用分类变量(而不是连续变量)做同样的事情时,我可以做频率但无法绘制密度:
ggplot(s.data, aes(gender)) +
geom_histogram(colour="black", fill="white") +
facet_wrap(~ major)
Run Code Online (Sandbox Code Playgroud)
我想要的.
但是我不知道这张图:
ggplot(s.data, aes(gender)) +
geom_histogram(aes(y = ..density..),colour="black", fill="white") +
facet_wrap(~ major)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?提前致谢.
我有一个数据框,想要根据两列做一个叠加密度图.我希望颜色是透明的.我使用填充选项完成了此操作,并且基本上将填充分配为因子列.如果默认情况下有一个因子列,则所有填充都将是透明的.
但在这样的情况下,没有因素我们如何用透明填充它.
library("ggplot2")
vec1 <- data.frame(x=rnorm(2000, 0, 1))
vec2 <- data.frame(x=rnorm(3000, 1, 1.5))
ggplot() + geom_density(aes(x=x), fill="red", data=vec1) +
geom_density(aes(x=x), fill="blue", data=vec2)
Run Code Online (Sandbox Code Playgroud)
我尝试添加,geom_density(alpha=0.4)
但它没有任何好处.
我使用密度函数与SJ方法:
rdat <- rnorm(111111)
density(rdat, bw = "sj")
Error in bw.SJ(x, method = "ste") : sample is too sparse to find TD
Run Code Online (Sandbox Code Playgroud)
它似乎在大样本上失败,说明样本太稀疏.这种情况以前也有人问在这里,但自2008年以来有什么改变?对于这个/变通办法有没有任何修复?
编辑:限制似乎是 46341
我正在将三列表导入Mathematica并使用它来制作密度图.但是,除非您以小增量获得非常大量的数据,否则密度图看起来是脱节的,显然不是连续的.
有没有办法或功能来平滑我的阴谋?
谢谢,本
我用带有3个变量的数据框创建了一个带有ggplot的密度图.一条密度线是虚线,但图例显示该线的实线.
数据如下所示:
> head(df)
R1 R2 R3
1 0.085383867 0.04366546 0.055320885
2 0.059148932 0.03477045 0.040804048
3 -0.181279986 -0.10189900 -0.097218145
4 0.002307494 -0.01137235 -0.003585813
5 -0.047816198 -0.04932982 -0.009389939
6 0.030535090 0.02544292 0.017650949
Run Code Online (Sandbox Code Playgroud)
该图的代码是:
ggplot(data=df)+
stat_density(aes(x=R1, colour="rho = -0,6"), adjust=4, lwd=0.5, geom="line", position="identity")+
stat_density(aes(x=R2, colour="rho = 0,6"), adjust=4, lwd=0.5, geom="line", position="identity")+
stat_density(aes(x=R3, colour="rho = 0"), linetype=2, adjust=4, lwd=0.5, geom="line", position="identity")+
xlim(-0.5, 0.5)+
xlab("Renditen")+
ylab("Dichte")+
ggtitle("Renditeverteilung im Heston-Modell")+
theme(plot.title=element_text(face="bold", size=16, vjust=2), axis.title.x=element_text(vjust=-1, size=12),
axis.title.y=element_text(vjust=-0.25, size=12), legend.text=element_text(size=12), legend.title=element_text(size=12), legend.margin=unit(1.5, "cm"),
legend.key.height=unit(1.2, "line"), legend.key.size=unit(0.4, "cm"), …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用R的本机plot命令获得与此图相似的图。
我可以使用下面的代码得到类似的结果,但是,我希望密度多边形重叠。有人可以建议一种方法吗?
data = lapply(1:5, function(x) density(rnorm(100, mean = x)))
par(mfrow=c(5,1))
for(i in 1:length(data)){
plot(data[[i]], xaxt='n', yaxt='n', main='', xlim=c(-2, 8), xlab='', ylab='', bty='n', lwd=1)
polygon(data[[i]], col=rgb(0,0,0,.4), border=NA)
abline(h=0, lwd=0.5)
}
Run Code Online (Sandbox Code Playgroud)
输出:
我试图在R中叠加三个不同的密度图来创建一个显示所有三条线的图(叠加).我已经sm
安装/加载了包,但我尝试使用它与我的数据无济于事.我创建了三个单独的数据图,只需使用density()
和绘制值.我的代码看起来像这样:
library(sm)
set.seed(0)
x <- rnorm(100, 0, 1)
y <- rnorm(126, 0.3, 1.2)
z <- rnorm(93, -0.5, 0.7)
dx <- density(x)
dy <- density(y)
dz <- density(z)
plot(dx)
plot(dy)
plot(dz)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用sm.density.compare()
叠加图形时:
sm.density.compare(dx,dy,model="equal")
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
sm.density.compare(dx,dy,model ="equal")
出错:sm.density.compare只能处理1-d数据跟踪:
有谁知道如何解决这个问题?我研究了很多但没有成功.我是R的新手,可以真正使用帮助.
通过不同的帖子看完后,我发现了如何的均值V线增加密度图如图所示这里。使用上述链接中提供的数据:
1) 如何使用 geom_ribbon 在平均值周围添加 95% 的置信区间?CI 可以计算为
#computation of the standard error of the mean
sem<-sd(x)/sqrt(length(x))
#95% confidence intervals of the mean
c(mean(x)-2*sem,mean(x)+2*sem)
Run Code Online (Sandbox Code Playgroud)
2)如何将vline限制在曲线下的区域?您将在下图中看到曲线外的 vline 图。
可以在https://www.dropbox.com/s/bvvfdppekbjyjh0/test.csv?dl=0找到非常接近我的实际问题的示例数据
更新
使用上面链接中的真实数据,我使用@beetroot 的答案尝试了以下操作。
# Find the mean of each group
dat=me
library(dplyr)
library(plyr)
cdat <- ddply(data,.(direction,cond), summarise, rating.mean=mean(rating,na.rm=T))# summarize by season and variable
cdat
#ggplot
p=ggplot(data,aes(x = rating)) +
geom_density(aes(colour = cond),size=1.3,adjust=4)+
facet_grid(.~direction, scales="free")+
xlab(NULL) + ylab("Density")
p=p+coord_cartesian(xlim = c(0, 130))+scale_color_manual(name="",values=c("blue","#00BA38","#F8766D"))+
scale_fill_manual(values=c("blue", "#00BA38", "#F8766D"))+
theme(legend.title = element_text(colour="black", size=15, …
Run Code Online (Sandbox Code Playgroud) 我试图在 ggridges 的密度图中画一条线
library(ggplot2)
library(ggridges)
ggplot(iris, aes(x = Sepal.Length, y = Species)) +
geom_density_ridges(rel_min_height = 0.01)
Run Code Online (Sandbox Code Playgroud)
指示最高点并标记该点的 x 值。像下面这样的东西。非常感谢任何有关实现此目标的建议
我正在尝试调整同时使用stat_function
和的图的图层geom_vline
。我的问题是垂直线与绿色区域不完全对齐:
在这篇文章中,我看到了一个对齐两个单独绘图的解决方案,但是,在我的情况下,我想在同一个绘图中对齐。
all_mean <- mean(mtcars$wt,na.rm = T)%>% round(2)
all_sd <- sd(mtcars$wt,na.rm = T)%>% round(2)
my_score <- mtcars[1,"wt"]
dd <- function(x) { dnorm(x, mean=all_mean, sd=all_sd) }
z <- (my_score - all_mean)/all_sd
pc <- round(100*(pnorm(z)), digits=0)
t1 <- paste0(as.character(pc),"th percentile")
p33 <- all_mean + (qnorm(0.3333) * all_sd)
p67 <- all_mean + (qnorm(0.6667) * all_sd)
funcShaded <- function(x, lower_bound) {
y = dnorm(x, mean = all_mean, sd = all_sd)
y[x < lower_bound] <- NA
return(y)
} …
Run Code Online (Sandbox Code Playgroud)