我在y上有一个连续变量,在x轴上有一个分类变量。在分类变量中,顺序是有道理的,按其索引拟合回归是有意义的,我的意思是不要c('a', 'b', 'c')
使用索引 ( order(c('a', 'b', 'c'))
,即c(1, 2, 3)
),并根据此拟合模型。但是,geom_smooth(method = lm)
如果一个变量不是数字,ggplot 拒绝拟合 a 。好的,那么我可以告诉它使用顺序:
geom_smooth(aes(x = order(hgcc), y = rtmean), method = lm)
Run Code Online (Sandbox Code Playgroud)
但随后它从数据框中获取整列的索引scales = 'free'
,当x
一个图上仅出现变量水平的一个子集时,这对于分面来说并不好。整个数据帧中的索引平均要高得多,所以回归将绘制在右边很远的地方:
这是一个最小的工作示例:
require(ggplot2)
load(url('http://www.ebi.ac.uk/~denes/54b510889336eb2591d8beff/sample_data.RData'))
ggplot(adata12cc, aes(x = hgcc, y = rtmean, color = cls, size = log10(intensity))) +
geom_point(stat = 'sum', alpha = 0.33) +
geom_smooth(
aes(x = order(hgcc), y = rtmean),
method = 'glm') +
facet_wrap( ~ uhgroup, scales = 'free') +
scale_radius(guide = guide_legend(title = 'Intensity (log)')) +
scale_color_discrete(guide = guide_legend(title = 'Class')) +
xlab('Carbon count unsaturation') +
ylab('Mean RT [min]') +
ggtitle('RT vs. carbon count & unsaturation by headgroup') +
theme(axis.title = element_text(size = 24),
axis.text.x = element_text(angle = 90, vjust = 0.5, size = 9, hjust = 1),
axis.text.y = element_text(size = 11),
plot.title = element_text(size = 21),
strip.text = element_text(size = 18),
panel.grid.minor.x = element_blank())
Run Code Online (Sandbox Code Playgroud)
我知道这不是做事的好方法,但是 ggplot 可以让生活变得更轻松,如果我可以参考这些变量并使用它们做一些事情,无论如何通过分面进行子集化。
我想我有一个解决方案,但我不确定你想要什么......
主要问题是您的 x 值标签已经被分割了uhgroup
如果您查看它们的因素PC-O(38.7)
PC(38.7
等...
所以第一件事就是hgcc
为 x 轴创建一个新值。
adata12cc$hgcc_value <-as.factor(substr(adata12cc$hgcc, (nchar(levels(adata12cc$hgcc)[adata12cc$hgcc])-5), nchar(levels(adata12cc$hgcc)[adata12cc$hgcc])))
Run Code Online (Sandbox Code Playgroud)
然后另一个问题是你有不同的 x 轴geom_point
和geom_smooth
。一个是hgcc
,另一个是order(hgcc_value)
。
解决方案是使用相同的值,这里我使用as.numeric(hgcc_value)
(而不是order()
) 并scale_x_continuous
在中断的标签中精确。
ggplot(adata12cc, aes(x = as.numeric(hgcc_value), y = rtmean, color = cls, size = log10(intensity))) +
geom_point(stat = 'sum', alpha = 0.33) +
geom_smooth(
aes(x = as.numeric(hgcc_value), y = rtmean),
method = 'glm') +
facet_wrap( ~ uhgroup, scales = 'free') +
scale_radius(guide = guide_legend(title = 'Intensity (log)')) +
scale_color_discrete(guide = guide_legend(title = 'Class')) +
scale_x_continuous(name = "Carbon count unsaturation",
breaks=as.numeric(adata12cc$hgcc_value),
labels = adata12cc$hgcc_value,
minor_breaks = NULL)+
ylab('Mean RT [min]') +
ggtitle('RT vs. carbon count & unsaturation by headgroup') +
theme(axis.title = element_text(size = 24),
axis.text.x = element_text(angle = 90, vjust = 0.5, size = 9, hjust = 1),
axis.text.y = element_text(size = 11),
plot.title = element_text(size = 21),
strip.text = element_text(size = 18),
panel.grid.minor.x = element_blank())
Run Code Online (Sandbox Code Playgroud)
是你要找的吗?