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
将在文本周围放置一个框,使其更可见。