问题描述
我有一个简单的ggplot条形图,它显示有关学校费用的信息。 它从具有以下列的数据框中检索其信息:
- 购买地点(有两个经常性购买地点)
- 什么是美元购买金额
您可以在本文末尾(csv格式)仔细查看这些数据。
我图中的每个条形图代表一个不同的购买位置。条形图为每次购买堆叠多种颜色(与其数量成正比)。这是我的情节:
如您所见,缩放比例显然不正确(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
。这是解决问题的一种方法。
- 将
MONTANT
列强制为数字; - 不能为数字的矢量元素变为
NA
,并带有警告"NAs introduced by coercion"
; - 使用
!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))