簡體   English   中英

為什么geom_bar y軸與實際數字不成比例?

[英]Why is geom_bar y-axis unproportional to actual numbers?

抱歉,如果這個問題已經存在-已經搜索了一段時間,沒有找到任何東西。 我是R語言的新手,在做所有這些事情的同時學習。 我應該通過r markdown創建一些PDF,以特定的主要診斷和輔助診斷來分析患者數據。 為此,我應該通過ggplot(geom_bar和geom_boxplot)繪制一些數字。

所以到目前為止,我要做的是,我通過SQL檢索包含兩個代碼的數據集,然后將它們加載到data.table-objects中。 之后,我加入他們的行列以獲取所需的數據。 在此之后,我添加了包含這些代碼的子字符串的列,以及添加了包含那些特定子字符串的計數的列(以便我可以繪制每個代碼的出現次數)。 我現在想例如將某些data.table放入geom_bar或geom_boxplot中並使其可見。 這實際上是可行的,但是我的y軸的比例尺很奇怪,與實際顯示的數字不符。 條形的比例也不准確。

例如:一個診斷出現600次,另一診斷出現1000次。 y軸顯示的步長為0-500.000-1.000.000-1.500.000-...。顯示600的條超小,顯示1000的條上升到1.500.000

如果我之前創建了一個新變量,並通過count()計數了我需要的內容並對其進行了繪制,那么它就可以正常工作。 我在y軸上放置的行在兩個變量中都具有相同的數據類型(整數)

所以這就是我創建用於繪圖的data.table的方式

exazerbationsHdComorbiditiesNd <- allExazerbationsHd[allComorbiditiesNd, on="encounter_num", nomatch=0]
exazerbationsHdComorbiditiesNd <- exazerbationsHdComorbiditiesNd[, c("i.DurationGroup", "i.DurationInDays", "i.start_date", "i.end_date", "i.duration", "i.patient_num"):=NULL]
exazerbationsHdComorbiditiesNd[ , IcdHdCodeCount := .N, by = concept_cd]
exazerbationsHdComorbiditiesNd[ , IcdHdCodeClassCount := .N, by = IcdHdClass]

如果我現在想通過IcdHdCodeClassCount通過IcdHdCodeClassCount繪制圖,請執行以下操作:

ggplot(exazerbationsHdComorbiditiesNd, aes(exazerbationsHdComorbiditiesNd$IcdHdClass, exazerbationsHdComorbiditiesNd$IcdHdCodeClassCount, label=exazerbationsHdComorbiditiesNd$IcdHdCodeClassCount)) + geom_bar(stat = "identity") + geom_text(vjust = 0, size = 5)

它輸出具有奇怪比例的所述條形圖。 如果我先做:

plotTest <- count(exazerbationsHdComorbiditiesNd, exazerbationsHdComorbiditiesNd$IcdHdClass)

然后對其進行條形圖繪制:

ggplot(plotTest, aes(plotTest$`exazerbationsHdComorbiditiesNd$IcdHdClass`, plotTest$n, label=plotTest$n)) + geom_bar(stat = "identity") + geom_text(vjust = 0, size = 5)

一切完美且有效。 我還檢查了我需要的列的數據類型:

sapply(exazerbationsHdComorbiditiesNd, class)
sapply(plotTest, class)

在這兩個變量中,我需要的列均為字符和整數類型

編輯:不幸的是我不能發布圖像。 因此,這里只是這些鏈接。 這是帶有錯誤y軸的圖的屏幕截圖: https : //ibb.co/CbxX1n7這是右圖所示的屏幕截圖: https : //ibb.co/Xb8gyx1

下面是一些示例性數據,我復制出data.table對象: Exampledata

由於您將類計數添加為附加列-而不是匯總-發生的是,對於數據中的每一行,類計數相互堆疊:

library(tidyverse)

set.seed(42)

df <- tibble(class = sample(letters[1:3], 10, replace = TRUE)) %>% 
  add_count(class, name = "count")

df # this is essentially what your data looks like
#> # A tibble: 10 x 2
#>    class count
#>    <chr> <int>
#>  1 a         5
#>  2 a         5
#>  3 a         5
#>  4 a         5
#>  5 b         3
#>  6 b         3
#>  7 b         3
#>  8 a         5
#>  9 c         2
#> 10 c         2

ggplot(df, aes(class, count)) + geom_bar(stat = "identity")

您可以使用position = "identity" ,以使條形圖不會堆疊:

ggplot(df, aes(class, count)) +
  geom_bar(stat = "identity", position = "identity")

但是,這會在您的繪圖中創建一堆看不見的不必要的圖層。 更好的方法是在繪制之前從數據中刪除多余的行:

df %>%
  distinct(class, count)
#> # A tibble: 3 x 2
#>   class count
#>   <chr> <int>
#> 1 a         5
#> 2 b         3
#> 3 c         2

df %>% 
  distinct(class, count) %>%
  ggplot(aes(class, count)) +
  geom_bar(stat = "identity")

reprex軟件包 (v0.3.0.9000)創建於2019-09-05

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM