R 在ggplot中复制已发布的图像:堆叠条形图?
我试图在ggplot中复制此图像: 图2b,来自Zak等人,2016年。见- 我最初尝试使用堆叠条形图,但我无法使箱子的宽度完全相同。条形图的本质似乎使每个类别都成为一个无法修改的集合大小 我将x轴设置为时间点,y轴设置为每个样本,颜色设置为值 我已经创造了一个连接线情节,并取得了一些成功;然而,我不认为它有同样的锐度,在那里看到的图像 是否有人建议我如何使用具有自定义高度的堆叠条形图在ggplot中重新创建此图形?还是我应该继续努力改进折线图R 在ggplot中复制已发布的图像:堆叠条形图?,r,ggplot2,graph,R,Ggplot2,Graph,我试图在ggplot中复制此图像: 图2b,来自Zak等人,2016年。见- 我最初尝试使用堆叠条形图,但我无法使箱子的宽度完全相同。条形图的本质似乎使每个类别都成为一个无法修改的集合大小 我将x轴设置为时间点,y轴设置为每个样本,颜色设置为值 我已经创造了一个连接线情节,并取得了一些成功;然而,我不认为它有同样的锐度,在那里看到的图像 是否有人建议我如何使用具有自定义高度的堆叠条形图在ggplot中重新创建此图形?还是我应该继续努力改进折线图 Code : ## Connecting Lin
Code : ## Connecting Line chart
ggplot(groupC, aes(colour=value, y=sample, x=timepoint)) +
geom_line(size=12) +
theme(plot.title = element_text(hjust = 0.5,size=12)) +
scale_colour_gradientn(colours = myPalette(100), limits=c(1, 80), na.value = NA, name="Value") +
ylab("") +
theme_classic()
## Bar Chart
ggplot(groupC_bar, aes(x=sample, y=timepoint, fill=value)) +
geom_bar(stat="identity", colour="black") + coord_flip()
Data
sample timepoint value
a1 m0 0
b2 m0 2
c3 m0 6
d4 m0 7
e5 m0 3
a1 m2 9
b2 m2 10
c3 m2 12
d4 m2 16
e5 m2 11
a1 m4 16
b2 m4 20
c3 m4 15
d4 m4 20
e5 m4 32
a1 m6 34
b2 m6 34
c3 m6 18
d4 m6 33
e5 m6 54
如果您希望提供这样的渐变填充外观,只需翻转坐标并堆叠条,使用填充美学中的自定义调色板:
my_palette <- colorRampPalette(c("red", "#DDDD00", "forestgreen"))
df <- data.frame(sample = rep(paste0(letters[1:5], 1:5), each = 100),
value = rep(c(1, 0.8, 0.65, 1.3, 0.5), each = 100),
color = factor(rep(my_palette(100), 5), my_palette(100)))
ggplot(df, aes(x = sample, y = value, fill = color)) +
geom_col() +
scale_fill_identity() +
coord_flip() +
theme_classic() +
theme(axis.line.x = element_blank(),
axis.text.x = element_blank(),
axis.title.x = element_blank())
编辑 具有均匀箱子宽度的选项:
ggplot(groupC, aes(x = 1, y = sample, fill = value)) +
geom_col() +
scale_fill_gradientn(colours = c("forestgreen", "yellow", "red")) +
scale_x_continuous(breaks = 1:4 - 0.5, labels = unique(groupC$timepoint)) +
theme_classic() +
labs(x = "timepoint")
谢谢您的回复。我举了一个例子,因为我不想发布大数据。我已经在我的数据上试过了,但仍然不正确,也许我不清楚。我希望值变量是彩色值,样本(Y)是时间点(X)。我有14个样本*8个时间点。如果我尝试第二个例子,我不容易看到更改的值,并且箱子的宽度取决于值中的数字。有没有办法为时间点和提供颜色的值设置一个固定的宽度?我好像连修改代码都找不到?是的!哦,哇,太完美了。我从来不知道你能这样休息。当我以不同的方式尝试它时,它就是不起作用。非常感谢,艾伦。我不想告诉你我今天在这上面浪费了多少时间。只是出于好奇,在x=1的情况下,有没有办法标记图表?例如,框及其值。这并不重要。我只是想确保自己完全理解,以便将来可以在不同的数据上重现。@lmrogers34是的。您应该能够指定<代码> GEOMUX文本<代码> >代码>位置=“填充”<代码>,以在框的中间获取标签。默认情况下,该位置设置为堆叠,因此x=1只允许一次堆叠一个单元的箱子,使它们具有相同的宽度。您可能还想查看plotting
geom_tile(aes(x=timepoint,y=sample,fill=value))
,这使得获得类似的绘图更加容易(尽管“条”之间没有完美的空格。我使用了:geom_text(aes(label=value),color=“black”,position=position_stack(vjust=0.5))这很好。我会搞乱geom_tile()并看看我能想出什么。再次感谢您清晰的代码和帮助。