For*_*415 8 r data-visualization ggplot2
我想要完成的任务:手动添加形状(足球场上的线条和圆圈,在我的实际项目中)到散点图.这是我实际项目的缩小示例,但说明了我需要帮助的问题.
以下是我为此示例使用的数据:
data <- data.frame("name" = c("A", "A", "B", "B", "C", "C"),
"x" = c(.13, .64, .82, .39, .51, .03),
"y" = c(.62, .94, .10, .24, .20, .84))
Run Code Online (Sandbox Code Playgroud)
我将提供示例代码,首先是一种工作方式(繁琐,太长),然后是一种我无法弄清楚的方法(这似乎更有效/简洁,可能...... 更快?).
library(ggplot2)
ggplot(data, aes(x, y)) +
geom_point() +
geom_segment(aes(x = 0,xend = 1,y = 1,yend = 1)) +
geom_segment(aes(x = 0, xend = 1, y=0,yend=0)) +
geom_segment(aes(x=1, xend=1, y=0, yend=1)) +
geom_segment(aes(x=0, xend=0, y=0, yend=1))
Run Code Online (Sandbox Code Playgroud)
这让我有一个很好的1x1音高,有6个数据点(不要以为我可以嵌入剧情,因为我没有足够的声望).由于我的实际项目有更多的数据点,还有更多的"形状"(线段,圆和圆弧)构成音高,我认为使用向量来定义geom_segment美学会更好 - 因为完整的数据集非常缓慢.这就是我所拥有的:
ggplot(data, aes(x, y)) +
geom_point() +
geom_segment(aes(x = c(0,0,1,0),
xend = c(1,1,1,0),
y = c(1,0,0,0),
yend = c(1,0,1,1)))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error: Aesthetics must be either length 1 or the same as the data (16): x, y, xend, yend
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用geom_segment中的inherit.aes = FALSE来更改我调用aes()的层,但它仍然会给出该错误.我对R比较陌生,对SO来说很新,所以如果我在发布这个问题时使用任何不正确的术语或协议,我很抱歉.
问题在于,当单独列出构成音高的每个形状(每个单独的线段或圆圈的额外图层),然后将x,y数据添加为点时,绘制图表需要永远.
使用矢量绘制形状图层或任何其他创造性解决方案时,任何帮助避免该错误都会很棒.我的主要目标是使这个多个形状和许多数据点的绘图更快速地呈现(拥有更优雅的代码也将是一个很好的奖励).
谢谢!
Axeman试图说的是,用您的段写入和额外的数据帧,并geom_segment通过data参数将其加载到函数中.如果这样做,它不会使用提供给ggplot函数的标准数据,但会使用它自己的数据.
就像是
data <- data.frame("name" = c("A", "A", "B", "B", "C", "C"),
"x" = c(.13, .64, .82, .39, .51, .03),
"y" = c(.62, .94, .10, .24, .20, .84))
seg_df <- data.frame(x=c(0,0,1,0),
y=c(1,0,0,0),
xend=c(1,1,1,0),
yend=c(1,0,1,1))
ggplot(data, aes(x, y)) +
geom_point() +
geom_segment(data=seg_df, aes(x, y, xend=xend, yend=yend))
Run Code Online (Sandbox Code Playgroud)