如何在R中重命名绘图的类别?

pod7payv  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(128)

我想将“收入”类别从1、2、3、4、5重命名为图中收入的真实的值。我试过这个代码,但它不起作用。有人能解释一下为什么吗?

ggplot(data=subset(trips_renamed,income!="99")) + 
    geom_bar(mapping = aes(x = income,fill="income"))+
    scale_x_discrete(labels=c("<=4000","4001-8000","8001-12000","12001- 
    16000",">16000",position="bottom"))+
    labs(y= "Total number of trips", x="Income Classes")+
    theme(legend.position = "none")
4jb9z9bj

4jb9z9bj1#

如果您提供了一个最小的可重复示例,则查找和测试答案会容易得多。但是,下面显示了如何更改与您的问题类似的图的比例。由于x的值是数字,因此我们需要使用(有点违反直觉)scale_x_continuous来更改标签 * 动态 *

library(ggplot2)
ggplot(data=mtcars) + 
  geom_bar(aes(x = gear))+
  scale_x_continuous(breaks = 3:5,  labels=c("<4", "4-4.9",">4"))

退货:

lf3rwulv

lf3rwulv2#

您的问题似乎与trips_renamed$income"integer"还是"numeric"类有关。因此,scale_x_discrete()应替换为scale_x_continuous()。您可以使用scale_x_continuous()或转换为离散值(因子),然后使用scale_x_discrete()。下面是使用以下虚拟数据集的两个示例。

set.seed(8675309)
df <- data.frame(income=sample(1:5, 1000, replace=T))

选项1:重新标记连续轴

如果class(trips_renamed$income)"numeric""integer",那么您需要使用scale_x_continuous()。重新标记需要您指定breaks=labels=参数,并且它们必须具有相同的长度。这应该可以工作:

ggplot(df, aes(x=income)) + geom_bar() +
  scale_x_continuous(breaks=1:5, labels=c("<=4000","4001-8000","8001-12000","12001- 
    16000",">16000"),position="bottom")

选项2:转换为因子并使用离散比例

另一种选择是先转换为因子,然后使用scale_x_discrete()。这里不需要breaks=参数(使用因子的水平):

df$income <- factor(df$income)
ggplot(df, aes(x=income)) + geom_bar() +
  scale_x_discrete(labels=c("<=4000","4001-8000","8001-12000","12001- 
    16000",">16000"),position="bottom")

您将得到与上面相同的图。

选项2a:因子和定义标签在一起

如果你真的想变得很巧妙,你可以在定义因子的同时定义标签,它们将被用于轴标签而不是水平的名称:

df2 <- df

df2$income <- factor(df2$income, labels=c("<=4000","4001-8000","8001-12000","12001- 
    16000",">16000"))

ggplot(df2, aes(x=income)) + geom_bar()

这些一起应该可以让您很好地了解ggplot2在选择如何标记轴时的工作方式。

相关问题