Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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
如何使用for循环绘制ggplot?_R_Ggplot2 - Fatal编程技术网

如何使用for循环绘制ggplot?

如何使用for循环绘制ggplot?,r,ggplot2,R,Ggplot2,是否有任何有效的方法来绘制ggplot使用for循环?如何正则表示将放入ggplot函数中的冒号 例如,我应该如何在代码中定期表达『满意』和『飞行距离』 ggplot(data = t1, aes(x = Flight.Distance))+ geom_histogram(aes(y = ..density.., color =satisfaction, fill =satisfaction), alpha = 0.4, position = "identity") +

是否有任何有效的方法来绘制ggplot使用for循环?如何正则表示将放入ggplot函数中的冒号

例如,我应该如何在代码中定期表达『满意』和『飞行距离』

ggplot(data = t1, aes(x = Flight.Distance))+
  geom_histogram(aes(y = ..density.., color =satisfaction, fill =satisfaction),  alpha = 0.4, position = "identity") +
  geom_density(aes(color = satisfaction), size =1)
我曾经成功地使用了以下代码:

plot_data_column_2 = function (data, column1, column2) {
  ggplot(data, aes_string(x = column1, fill = column2)) +
    geom_bar(position = position_dodge())+
    guides(fill=guide_legend(title=sprintf('%s', column2)))+
    xlab(sprintf('%s', column2))
}

plot_data_column_2(data = data1, column1 = 'clus_res', column2 = 'Gender')

然而,我无法在geom_直方图上复制这种体验。我曾尝试过一些愚蠢的方法,但结果却很糟糕

ggplot(data = t1, aes(x = Flight.Distance))+
  geom_histogram(aes(y = ..density.., color =t1[['satisfaction']] ,fill =t1[['satisfaction']]),  alpha = 0.4, position = "identity") +
  guides(fill=guide_legend(title='satisfaction'))+
  geom_density(aes(color = t1[['satisfaction']]), size =1)

因此,我试图通过删除图例指南并稍后将其添加回来解决此问题。但是这个传说已经永远消失了

ggplot(data = t1, aes(x = t1[['Flight.Distance']]))+
  xlab('Flight.Distance')+
  geom_histogram(aes(y = ..density.., color =t1[['satisfaction']] ,fill =t1[['satisfaction']]),  alpha = 0.4, position = "identity") +
  theme(legend.position="none")+
  guides(col = guide_legend(ncol = 23))+
  geom_density(aes(color = t1[['satisfaction']]), size =1)
问题解决了! 很抱歉,我发现我忘记添加一个重要的函数“aes_string”,添加后我的代码再次工作

ggplot(data = t1, aes_string(x = 'Flight.Distance'))+
  geom_histogram(aes_string(y = '..density..', color ='satisfaction', fill ='satisfaction'),  alpha = 0.4, position = "identity") +
  geom_density(aes_string(color = 'satisfaction'), size =1)

虽然可以使用aes_字符串,但更具表意性的tidyverse方法是使用:

my_plot%
ggplot(aes(x={{x_var}}),
颜色={{group_var}},
fill={{group_var}},
组={{group_var}}})+
几何图形直方图(aes(y=…密度…),
alpha=0.4,位置=“身份”)+
几何密度(尺寸=1,填充=NA)
}
my_图(mtcars、mpg、系数(am))

另一方面,最好将距离分层,以便通过总飞行时间或距离进行更清晰的视觉表示。这将导致更少的条,而不会降低消息的清晰度。
my_plot <- function(df, x_var, group_var) {
  df %>%
    ggplot(aes(x = {{x_var}},
               color = {{group_var}},
               fill  = {{group_var}},
               group = {{group_var}})) +
    geom_histogram(aes(y = ..density..),
                   alpha = 0.4, position = "identity") +
    geom_density(size = 1, fill = NA)
}

my_plot(mtcars, mpg, factor(am))