R - 如何使用ggplot2在轴上显示有序因子的值

时间:2016-11-05 15:33:48

标签: r plot ggplot2

我想在带有ggplot2的条形图上显示有序因子的值(理想情况下,否则使用标准图)。

我有一个像这样的有序因素:

  

“你对这些练习感到满意:”    - 绝对不满意=>价值1    - 不满意=>价值2    - satisf =>价值3    - 非常满意=>价值4

我想绘制一个平均值和值“绝对不满意”的条形图 - >轴上的“非常满意”而不是1 - > 4。

是否可以使用ggplot2执行此操作?在我看来,主要的困难是绘制因子的平均值而不是值的分布(实际上我的绘图是通过将有序因子转换为整数来实现的)。

以下是我的数据集上的dput结果。

structure(c(3L, 2L, 3L, 2L, 2L, 3L, 2L, NA, 2L, 3L, 4L, 2L, 1L
), .Label = c("pas du tout satisfait", "plutôt pas satisfait", 
"plutôt satisfait", "très satisfait"), class = c("ordered", 
"factor"))

这是barplot的例子(没有轴上的值......):

example

代码如下。

Toto <- structure(c(3L, 2L, 3L, 2L, 2L, 3L, 2L, NA, 2L, 3L, 4L, 2L, 1L
), .Label = c("pas du tout satisfait", "plutôt pas satisfait", 
              "plutôt satisfait", "très satisfait"), class = c("ordered","factor"))

TotoNumeric <- as.data.frame(as.integer(Toto))

DataForGggplot2 <- as.data.frame(round(sapply(X = TotoNumeric, FUN = "mean", na.rm = TRUE), 1))
colnames(DataForGggplot2) <- "Donnees"
DataForGggplot2$Etiquette <- "the exercises"

Graphe <- ggplot(data = DataForGggplot2, aes(x = Etiquette, y = Donnees)) +
  geom_bar(stat = "identity", fill = "blue") +
  scale_y_continuous(limits = c(0, 4))
  coord_flip()

print(Graphe)

如果我的要求不明确,我可以给你更多详细信息。

由于

1 个答案:

答案 0 :(得分:1)

您可以在labels中使用名为scale_y_continuous的选项。

对于此示例,我假设您要使用的因素是Toto。由于您设置了0 - 4的限制(即长度= 5),但只有Toto的4个级别,我为值0添加了NA。您还可以将限制设置为0 - 3或1 - 4,无需添加NA级别。

library(ggplot2)

Toto <- structure(c(3L, 2L, 3L, 2L, 2L, 3L, 2L, NA, 2L, 3L, 4L, 2L, 1L
), .Label = c("pas du tout satisfait", "plutôt pas satisfait", 
              "plutôt satisfait", "très satisfait"), class = c("ordered","factor"))

TotoNumeric <- as.data.frame(as.integer(Toto))

DataForGggplot2 <- as.data.frame(round(sapply(X = TotoNumeric, FUN = "mean", na.rm = TRUE), 1))
colnames(DataForGggplot2) <- "Donnees"
DataForGggplot2$Etiquette <- "the exercises"

Graphe <- ggplot(data = DataForGggplot2, aes(x = Etiquette, y = Donnees)) +
  geom_bar(stat = "identity", fill = "blue") +
  scale_y_continuous(name="Toto",  labels = c("NA", levels(Toto)),limits = c(0, 4))

coord_flip()

print(Graphe)

enter image description here

有关详细信息和示例,this是一个很好的资源。