我想用R覆盖同一设备上的2个密度图.我该怎么做?我搜索了网络,但我没有找到任何明显的解决方案(我对R来说很新).
我的想法是从文本文件(列)中读取数据然后使用
plot(density(MyData$Column1))
plot(density(MyData$Column2), add=T)
Run Code Online (Sandbox Code Playgroud)
这种精神......
提前致谢
我试图描绘我正在阿拉伯/波斯湾研究的某些生物的生态分布.以下是我尝试过的代码示例:
背景层
library(ggplot2)
library(ggmap)
nc <- get_map("Persian Gulf", zoom = 6, maptype = 'terrain', language = "English")
ncmap <- ggmap(nc, extent = "device")
Run Code Online (Sandbox Code Playgroud)
其他层
ncmap+
stat_density2d(data=sample.data3, aes(x=long, y=lat, fill=..level.., alpha=..level..),geom="polygon")+
geom_point(data=sample.data3, aes(x=long, y=lat))+
geom_point(aes(x =50.626444, y = 26.044472), color="red", size = 4)+
scale_fill_gradient(low = "green", high = "red") + scale_alpha(range = c(0.00, 0.25), guide = FALSE)
Run Code Online (Sandbox Code Playgroud)
但是,我想用它stat_density2d
来显示数百种物种的分布(在列中记录,例如SP1 ...... SPn),而不仅仅是显示纬度和经度.
我正在尝试使用1000之间的一组随机数在R中创建密度曲线,并将小于或等于某个值的部分着色.有很多解决方案涉及geom_area
或geom_ribbon
,但它们都需要一个yval
,我没有(它只是1000个数字的向量).有关如何做到这一点的任何想法?
另外两个相关问题:
stat_ecdf
它生成一个)做同样的事情,或者根本不用它?geom_vline
所以它只会达到密度曲线的高度,而不是整个y轴?代码:( geom_area
尝试编辑我发现的一些代码是失败的.如果我ymax
手动设置,我只需要一个列占据整个图,而不仅仅是曲线下面的区域)
set.seed(100)
amount_spent <- rnorm(1000,500,150)
amount_spent1<- data.frame(amount_spent)
rand1 <- runif(1,0,1000)
amount_spent1$pdf <- dnorm(amount_spent1$amount_spent)
mean1 <- mean(amount_spent1$amount_spent)
#density/bell curve
ggplot(amount_spent1,aes(amount_spent)) +
geom_density( size=1.05, color="gray64", alpha=.5, fill="gray77") +
geom_vline(xintercept=mean1, alpha=.7, linetype="dashed", size=1.1, color="cadetblue4")+
geom_vline(xintercept=rand1, alpha=.7, linetype="dashed",size=1.1, color="red3")+
geom_area(mapping=aes(ifelse(amount_spent1$amount_spent > rand1,amount_spent1$amount_spent,0)), ymin=0, ymax=.03,fill="red",alpha=.3)+
ylab("")+
xlab("Amount spent on lobbying (in Millions USD)")+
scale_x_continuous(breaks=seq(0,1000,100))
Run Code Online (Sandbox Code Playgroud) 我正在尝试将多个密度图与叠加层结合起来.ggplot和geom_density可以完成这项任务,但密度相互叠加.
ggplot(all.complete, aes(x=humid_temp)) +
geom_density(aes(group=height, colour=height, fill=height.f, alpha=0.1)) +
guides(fill = guide_legend(override.aes = list(colour = NULL))) +
labs(main="Temperature by Height", x="Temperature", y="Density")
Run Code Online (Sandbox Code Playgroud)
与此类似的是我正在努力实现的目标:
就我而言,年份将由身高代替.
谢谢!!!
是否有通用的方法来绘制密度(小提琴图)或直方图,显示x
沿平滑(x,y)
曲线的分布?我使用这种方法来显示x
何时存在多个组的边际分布(例如,一个面板上的不同曲线,由不同颜色描绘).
下面是一个使用Hmisc
包plsmo
函数得到分层黄土曲线和尖峰直方图的示例,显示了sex
特定的数据密度age
.
require(Hmisc)
set.seed(1)
age <- rnorm(500, 50, 15)
y <- sample(0:1, 500, TRUE)
sex <- sample(c('female','male'), 500, TRUE)
plsmo(age, y, group=sex, col=1:2,
datadensity=TRUE, scat1d.opts=list(nhistSpike=20))
Run Code Online (Sandbox Code Playgroud)
我想在一个图中垂直绘制数据集1和数据集2.不幸的是,数据很大,所以它只是一个点的污点,无法看到密度.我尝试了hist3和其他建议,但它覆盖了我的数据集,并且分箱看起来很糟糕.
是否有另一种绘制散点密度图的方法?它真的没有Matlab功能吗?如果没有,我可以使用哪个程序轻松生成这样的情节?
这两个例子之间的混合:
我试图在一个geom_density()图中绘制3组.
数据采用长格式:
MEI Count Region
-2.031 10 MidWest
-1.999 0 MidWest
-1.945 15 MidWest
-1.944 1 MidWest
-1.875 6 MidWest
-1.873 10 MidWest
-1.846 18 MidWest
Run Code Online (Sandbox Code Playgroud)
Region是变量,因此还有South和NorthEast值,代码如下:
ggplot(d, aes(x=d$MEI, group=d$region)) +
geom_density(adjust=2) +
xlab("MEI") +
ylab("Density")
Run Code Online (Sandbox Code Playgroud)
更近一步
我想在直方图中添加密度线(实际上是正常密度).
假设我有以下数据.我可以通过ggplot2
以下方式绘制直方图:
set.seed(123)
df <- data.frame(x = rbeta(10000, shape1 = 2, shape2 = 4))
ggplot(df, aes(x = x)) + geom_histogram(colour = "black", fill = "white",
binwidth = 0.01)
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法添加密度线:
ggplot(df, aes(x = x)) +
geom_histogram(aes(y = ..density..),colour = "black", fill = "white",
binwidth = 0.01) +
stat_function(fun = dnorm, args = list(mean = mean(df$x), sd = sd(df$x)))
Run Code Online (Sandbox Code Playgroud)
但这不是我真正想要的,我希望这个密度线适合计数数据.
我发现了一个类似的帖子(HERE)提供了解决这个问题的方法.但它在我的情况下不起作用.我需要一个任意的扩展因子来得到我想要的东西.这根本不是一般化的:
ef <- 100 # Expansion factor
ggplot(df, aes(x = x)) +
geom_histogram(colour = "black", fill = "white", …
Run Code Online (Sandbox Code Playgroud) 我有一个从原始数据中获得的1m记录样本.(供您参考,您可以使用可能产生大致相似分布的虚拟数据
b <- data.frame(matrix(rnorm(2000000, mean=c(8,17), sd=2)))
c <- b[sample(nrow(b), 1000000), ]
Run Code Online (Sandbox Code Playgroud)
我认为直方图是两个对数正态分布的混合,我试图使用EM算法使用以下代码拟合求和的分布:
install.packages("mixtools")
lib(mixtools)
#line below returns EM output of type mixEM[] for mixture of normal distributions
c1 <- normalmixEM(c, lambda=NULL, mu=NULL, sigma=NULL)
plot(c1, density=TRUE)
Run Code Online (Sandbox Code Playgroud)
第一个图是对数似然图,第二个图(如果再次点击返回),给出类似于以下密度曲线:
正如我所提到的,c1的类型为mixEM [],而plot()函数可以容纳它.我想用颜色填充密度曲线.这很容易使用ggplot2()但ggplot2()不支持mixEM []类型的数据并抛出此消息:
"ggplot不知道如何处理类mixEM的数据"我还能采取其他方法解决这个问题吗?任何建议都非常感谢!!
谢谢!
为什么以下情节看起来不同?两种方法似乎都使用高斯内核.
如何ggplot2
计算密度?
library(fueleconomy)
d <- density(vehicles$cty, n=2000)
ggplot(NULL, aes(x=d$x, y=d$y)) + geom_line() + scale_x_log10()
Run Code Online (Sandbox Code Playgroud)
ggplot(vehicles, aes(x=cty)) + geom_density() + scale_x_log10()
Run Code Online (Sandbox Code Playgroud)
更新:
这个问题的解决方案已经在SO上出现了,但是ggplot2传递给R stats密度函数的具体参数仍然不清楚.
一种替代的解决方案是从GGPLOT2情节直提取密度数据,如图这里