R 调整条形图的比例并将类型的数据合并到单个条形图中
首先。。。我对我的英语很抱歉。。我可能时不时地缺少最合适的术语 无论如何。。我想制作一个条形图,多个条形图显示在彼此下方(因此将条形图翻转到一侧) 我得到的数据可能有点像这样:R 调整条形图的比例并将类型的数据合并到单个条形图中,r,ggplot2,bar-chart,R,Ggplot2,Bar Chart,首先。。。我对我的英语很抱歉。。我可能时不时地缺少最合适的术语 无论如何。。我想制作一个条形图,多个条形图显示在彼此下方(因此将条形图翻转到一侧) 我得到的数据可能有点像这样: t1 = c('name1','name1','name2','name2') t2 = c(5,0,2,1) t3 = c('a','b','a','b') test = data.frame(cbind(t1, t2, t3)) 在t1中,我们有名字 在t2中,我们有值 在t3中,我们有一个类型。。有点像超集。它要
t1 = c('name1','name1','name2','name2')
t2 = c(5,0,2,1)
t3 = c('a','b','a','b')
test = data.frame(cbind(t1, t2, t3))
在t1中,我们有名字
在t2中,我们有值
在t3中,我们有一个类型。。有点像超集。它要么属于a型,要么属于b型
理想情况下,我希望在同一行/栏或直接相邻栏中显示具有相同名称(t1)但不同类型(t3)的数据对象。(这似乎有效)
此外,这两种颜色之间的区别也起作用
ggplot(test, aes(x = t1, y = t2, fill = t3)) +
geom_bar(stat = 'identity', position = position_dodge()) +
geom_text(aes(label=t2), color = 'white') +
scale_fill_brewer(palette = 'Paired') +
theme_minimal() +
coord_flip()
现在我的问题:
不幸的是,条形图的比例不起作用。在x轴上,可以看到显示的值0、1、2、5之间的距离相等。。但是5显然比1离2远
如何解决缩放问题?
到目前为止,它还不能将xmin设置为xlim(,),也不能将xmin设置为y。此外,分解值也不起作用,就像排序或其他方法不起作用一样
还有。。这些数字的显示,我想直接贴在吧台上,看起来非常奇怪。数字隐藏在两条线的交点处
我怎样才能解决这个问题
非常感谢您的帮助,我也非常希望我的解释有一定的意义。实际上,当您使用
cbind
时,t2
正在成为一个因素。您可以使用cbind.data.frame
函数,如
test = cbind.data.frame(t1, t2, t3)
str(test)
'data.frame': 4 obs. of 3 variables:
$ t1: Factor w/ 2 levels "name1","name2": 1 1 2 2
$ t2: num 5 0 2 1
$ t3: Factor w/ 2 levels "a","b": 1 2 1 2
ggplot(test, aes(x = t1, y = t2, fill = t3)) +
geom_col(position = position_dodge()) +
geom_text(aes(label=t2), color = 'white') +
scale_fill_brewer(palette = 'Paired') +
theme_minimal() +
coord_flip()
查看数据的str
t1 = c('name1','name1','name2','name2')
t2 = c(5,0,2,1)
t3 = c('a','b','a','b')
test = data.frame(cbind(t1, t2, t3))
str(test)
'data.frame': 4 obs. of 3 variables:
$ t1: Factor w/ 2 levels "name1","name2": 1 1 2 2
$ t2: Factor w/ 4 levels "0","1","2","5": 4 1 3 2
$ t3: Factor w/ 2 levels "a","b": 1 2 1 2
对于geom_文本
定位
ggplot(test, aes(x = t1, y = t2, fill = t3)) +
geom_col(position = position_dodge()) +
geom_text(aes(label=t2), color = 'black',
position = position_dodge(width = 1), hjust = -0.5) +
scale_fill_brewer(palette = 'Paired') +
theme_minimal() +
coord_flip()
或者更简单,只要
data.frame(t1,t,t3)
。此外,要使文本为白色,geom_label
将在文本周围放置一个框,使其更可见。