Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在ggplot中循环变量,为每个变量创建密度分布网格_R_Loops_Ggplot2_Facet Grid - Fatal编程技术网

R 在ggplot中循环变量,为每个变量创建密度分布网格

R 在ggplot中循环变量,为每个变量创建密度分布网格,r,loops,ggplot2,facet-grid,R,Loops,Ggplot2,Facet Grid,我想为一个数据集中的多个变量创建一个密度分布图的网格,在平均值处有一条垂直虚线。以mtcars数据集为例,单变量绘图的代码为: ggplot(mtcars, aes(x = mpg)) + geom_density() + geom_vline(aes(xintercept = mean(mpg)), linetype = "dashed", size = 0.6) 我不清楚如何修改它,使其在数据集中的指定变量上循环,并生成一个包含每个变量的图的网格。这似乎涉及到添加facet_grid和

我想为一个数据集中的多个变量创建一个密度分布图的网格,在平均值处有一条垂直虚线。以mtcars数据集为例,单变量绘图的代码为:

ggplot(mtcars, aes(x = mpg)) + geom_density() + geom_vline(aes(xintercept = 
mean(mpg)), linetype = "dashed", size = 0.6) 
我不清楚如何修改它,使其在数据集中的指定变量上循环,并生成一个包含每个变量的图的网格。这似乎涉及到添加facet_grid和“vars”参数的一些组合,但我尝试了许多组合,但都没有成功

在我能在网上找到的所有例子中,facet_grid通过变量子集分割图,同时保持每个图的x和y相同,但我想让x的图在每个图中变化,y是值的密度


为了解决这个问题,我的理解是,新发布的ggplot包含了一些涉及“准旋转”的内容,这可能有助于解决我的问题(),但我还是不太明白如何将这里提供的示例应用到我自己的问题上

考虑将数据重塑为长格式,而不是使用面打印。在这里,x和y刻度都是自由的,因为各列之间的绘图大小不同

rdf <- reshape(mtcars, varying = names(mtcars), v.names = "value", 
               times = names(mtcars), timevar = "variable",
               new.row.names = 1:1000, direction = "long")

ggplot(rdf, aes(x = value)) + geom_density() + 
  geom_vline(aes(xintercept = mean(value)), linetype = "dashed", size = 0.6) +
  facet_grid(~variable, scales="free") 

rdf考虑将数据重塑为长格式,而不是使用面绘制。在这里,x和y刻度都是自由的,因为各列之间的绘图大小不同

rdf <- reshape(mtcars, varying = names(mtcars), v.names = "value", 
               times = names(mtcars), timevar = "variable",
               new.row.names = 1:1000, direction = "long")

ggplot(rdf, aes(x = value)) + geom_density() + 
  geom_vline(aes(xintercept = mean(value)), linetype = "dashed", size = 0.6) +
  facet_grid(~variable, scales="free") 

rdf您在
facet\u grid
中找到的示例都是正确的,您只是忽略了一个事实,即您需要稍微转换数据以使其工作。您将使用类似于tidyr的
gather
的功能将一组变量(列)转换为一对列:一个键和一个值列。然后你将在关键变量上刻面,值变量是你的新y变量。(对不起,小的输入错误,我的意思是“新的x变量”,因为你正在绘制密度。)哇,这看起来很好!对于像我这样的R新手来说,我这样做是为了得到mtcars变量disp和hp的两个图:
mt_density%gather(disp,hp,key=“variable”,value=“value”)ggplot(mt_density,aes(x=value))+geom_density()+geom_vline(aes(xintercept=mean(value)),linetype=“虚线”,size=0.6)+facet_grid(.~variable)
您在
facet_grid
中找到的示例都是正确的,您只是缺少一个事实,即您需要稍微转换数据以使其工作。您将使用类似于tidyr的
gather
的功能将一组变量(列)转换为一对列:一个键和一个值列。然后你将在关键变量上刻面,值变量是你的新y变量。(对不起,小的输入错误,我的意思是“新的x变量”,因为你正在绘制密度。)哇,这看起来很好!对于像我这样的R新手来说,我这样做是为了得到mtcars变量disp和hp的两个图:
mt_density%gather(disp,hp,key=“variable”,value=“value”)ggplot(mt_density,aes(x=value))+geom_density()+geom_vline(aes(xintercept=mean(value)),linetype=“虚线”,大小=0.6)+刻面网格(.~变量)