我试图通过tidyr
变得更好。有没有更好的方法来准备anscombe
数据集以使用ggplot2
进行绘图?具体来说,我不喜欢添加数据(obs_num
)。你会怎么做?
library(tidyverse)
library(datasets)
anscombe %>%
mutate(obs_num = 1:n()) %>%
gather(variable, value, -obs_num) %>%
separate(variable, c("variable", "set"), 1) %>%
spread(variable, value) %>%
ggplot(aes(x = x, y = y)) +
geom_point() +
stat_smooth(method = "lm", se = FALSE, fullrange = TRUE) +
facet_wrap(~set)
答案 0 :(得分:2)
我认为您需要添加额外的列,以便在<c:forEach items="${dashboardBean.barModel}" var="barChart">
<p:column>
<p:chart type="bar" model="#{barChart}" style="height:400px">
<p:commandButton type="button" value="Export"
onclick="PF('dlg1').show();"/>
</p:chart>
<p:dialog widgetVar="dlg1"
height="450px" width="800px" >
<p:chart type="bar" model="#{barChart}"/>
</p:dialog>
</p:column>
</c:forEach>
的调用中唯一标识每个观察。哈德利在对this SO question的评论中对此进行了讨论。另一种方法是单独堆叠spread
和x
列,如下面的代码所示,但我不明白为什么它会比你的版本更好。事实上,如果有y
和x
值最终没有通信,情况会更糟:
y
另一个选择是使用基础bind_cols(anscombe %>% select(matches("x")) %>% gather(set, "x"),
anscombe %>% select(matches("y")) %>% gather(key, "y")) %>%
select(-key) %>%
mutate(set = gsub("x", "Set: ", set))
,它更简洁:
reshape