我突然遇到ggplot
的可怕问题,我的原始绘图对象在某种程度上被内部覆盖了。
图p
基于数据帧s
的子集d
。更改s
后,图p
会自动更改:
library(ggplot2)
#data
d<-data.frame(
t=c(-1, 2, -3, 4, -5, 6),
order=1:6
)
#subset data
s<-d[4:6,]
#create plot
p<-
ggplot() +
geom_point(aes(x=s$t,y=1:nrow(s)),size=3,col="black")
#first plot print
p
#back to original data
s<-d
#second plot print
p #plot changed according to the new data frame
答案 0 :(得分:1)
除非您是ggplot2的专家,并且需要做一些相当复杂的事情,否则您应该永远,永远,永远使用向量vs将列映射为aes()
参数,并且确实也应尽量避免在$
中选择aes()
个选定列。这就是您的问题(看起来您似乎也在尝试使用ggplot2,就像使用基本图形绘制一样,这是一条充满危险的道路)。
library(ggplot2)
data.frame(
t = c(-1, 2, -3, 4, -5, 6),
order = 1:6
) -> d
s <- d[4:6,]
现在,执行适当的ggplot2习惯用法,并添加一列要使用的y
美学元素。由于我们不知道您想做什么,我随机选择了idx
这个名字。
s$idx <- 1:nrow(s)
现在/再次,执行正确的ggplot2习惯用语,并将数据帧传递到ggplot()
中,然后将列映射到美学无 $
。
ggplot(s) +
geom_point(
aes(t, idx), size = 3, color = "black"
) -> p
问题在于,在构造图表之前,ggplot2不会对参数进行任何操作。懒惰地评估它们,因此当您尝试更改s
后 对其进行绘制时,它将选择“新” s
。