如何使用条形图将ggplotR中的数字汇总成单个条形来获得可靠的刻度线?

问题描述

我有一个简单的ggplot条形图,它显示有关学校费用的信息。 它从具有以下列的数据框中检索其信息:

  • 购买地点(有两个经常性购买地点)
  • 什么是美元购买金额

您可以在本文末尾(csv格式)仔细查看这些数据。

我图中的每个条形图代表一个不同的购买位置。条形图为每次购买堆叠多种颜色(与其数量成正比)。这是我的情节:

Example plot

如您所见,缩放比例显然不正确(10.28刻度是y轴215.25刻度的三分之一左右)。

我应该如何使缩放比例准确,是什么导致此不正确的y轴?

这是我的原始csv文件

"DATE"      ;"MONTANT";"LIEU"                      ;"CAUSE"
"2020-01-25";    67.17;"Coop Cégep"                ;"Notes de cours"
"2020-02-24";     7.67;"Coop Cégep"                ;"Notes de cours"
"2020-01-30";    10.28;"Coop Cégep"                ;"Cahiers d'exercices"
"2020-03-02";   215.25;"Omnivox (Cégep Lanaudière)";"Frais de scholarité"
"2020-01-22";   114.60;"Coop Cégep"                ;"Romans,Notes de cours"
"2020-08-27";    78.33;"Coop Cégep"                ;"Romans,Notes de cours"
"<++>"      ;     <++>;"<++>"                      ;"<++>"

这是我用来生成此图像的代码

#!/bin/Rscript

# LIBRARIES ----

library(ggplot2)
library(RColorBrewer)

# CSV's ----

expenses <- head(data.frame(read.csv("paiements.csv",header=TRUE,sep=";")),-1)
expenses$DATE  <- as.Date(expenses$DATE)

# PLOTS ----

# Bar plot with different expenses sorted by location
expenses_df <- ggplot(expenses,aes(LIEU,MONTANT,fill=MONTANT)) +
    geom_bar(stat="identity") +
    geom_jitter(width=0.1,height=0,shape=18,size=4) +
    labs(
             title="Montants de diverses dépenses scholaires",x="Lieu",y="Montant") +
    theme(plot.title = element_text(hjust=0.5))

# JPEG ----

jpeg(
        file="paiements.jpg",)

print(expenses_df)

dev.off()

dput格式的数据

expenses <-
structure(list(DATE = c("2020-01-25","2020-02-24","2020-01-30","2020-03-02","2020-01-22","2020-08-27"),MONTANT = c(67.17,7.67,10.28,215.25,114.6,78.33),LIEU = c("Coop Cégep","Coop Cégep","Omnivox (Cégep Lanaudière)","Coop Cégep"),CAUSE = c("Notes de cours","Notes de cours","Cahiers d'exercices","Frais de scholarité","Romans,Notes de cours",Notes de cours")),row.names = c(NA,-6L),class = "data.frame")

解决方法

问题似乎是最后一个文件行。每列结尾的字符串"<++>"弄乱了数字列MONTANT。这是解决问题的一种方法。

  1. MONTANT列强制为数字;
  2. 不能为数字的矢量元素变为NA,并带有警告"NAs introduced by coercion";
  3. 使用!is.na(.)删除这些行。

代码如下。

expenses$MONTANT <- as.numeric(expenses$MONTANT)
expenses <- expenses[!is.na(expenses$MONTANT),]

现在将日期列强制转换为"Date"类并进行绘图。我用CAUSE填充了条形,定义了它们的颜色。

expenses$DATE  <- as.Date(expenses$DATE)

library(ggplot2)

ggplot(expenses,aes(LIEU,MONTANT,fill = CAUSE)) +
  geom_bar(stat="identity") +
  geom_jitter(width=0.1,height=0,shape=18,size=4) +
  labs(
    title="Montants de diverses dépenses scholaires",x="Lieu",y="Montant") +
  theme(plot.title = element_text(hjust=0.5))

enter image description here