【问题标题】:Plotting the amount of times a value was present in a column in ggplot绘制一个值在 ggplot 的列中出现的次数
【发布时间】:2021-04-02 11:04:58
【问题描述】:

我正在构建一个 Shiny 应用程序来为我拥有的系统的输出报告创建可视化。

报告包含我感兴趣的 3 个字段:地址代码、街道代码和城市代码。 这些字段的值是我拥有的数字代码,这些代码的含义对问题并不重要,我只是想创建一个图,我可以在其中查看每个列的每个代码出现了多少次(单独的每个字段的绘图)

例如,DF 看起来像这样

Address Code | Street Code | City Code
   100              100        30
   100              100        30
   0                 15        40
                               50     
   25                          0

可以看到,code的值也可以为null。

我期望的输出将类似于显示的水平条形图

Y 轴是代码本身,X 轴是它们被观察到的次数 所以按照模拟表,我想要这个:

          ADDRESS CODES
100 --------------
75  -
50  -
25  -
0   -------

    0     1      2     3

我在 [此处][1] 看到了一种解决问题的方法,但我一直遇到错误。

output$plot_levels <- plotly::renderPlotly({
        #loadData merely grabs the data and returns it as a data frame.
        #loadData uses fread to read the data from a file. It handles the null values as "".
        df <- loadData()
        df %>% 
            select(-`Address Code`) %>% 
            gather() %>% 
            #filter(`Address Code` != "") %>% 
            ggplot(aes(`Address Code`, ..count..)) + geom_col()
    })

我在应用程序中不断收到“错误:找不到对象'地址代码'”。所引用的地址代码在 ggplot 行中。

那为什么说它不存在呢?我已经确认 loadData 方法正在正确读取源文件,并且列名确实被读取为地址代码。 [1]:Plot table objects with ggplot?

【问题讨论】:

  • select(-`Address Code`) 导致您传递给 ggplot 的数据集中不再有 Address Code。删除这一行将消除错误。

标签: r ggplot2 dplyr shiny plotly


【解决方案1】:

试试这个:

library(dplyr)
library(tidyr)
library(ggplot2)
#Code
df %>% pivot_longer(everything()) %>%
  filter(!is.na(value)) %>%
  group_by(value) %>%
  summarise(N=n()) %>%
  mutate(value=factor(value,levels = unique(value),ordered = T)) %>%
  ggplot(aes(x=value,y=N))+
  geom_col(fill='cyan3')+
  coord_flip()+
  theme_bw()

输出:

或者使用plotly:

library(dplyr)
library(tidyr)
library(ggplot2)
library(plotly)
#Code
ggplotly(df %>% pivot_longer(everything()) %>%
  filter(!is.na(value)) %>%
  group_by(value) %>%
  summarise(N=n()) %>%
  mutate(value=factor(value,levels = unique(value),ordered = T)) %>%
  ggplot(aes(x=value,y=N))+
  geom_col(fill='cyan3')+
  coord_flip()+
  theme_bw())

输出:

使用的一些数据:

#Data
df <- structure(list(Address.Code = c(100L, 100L, 0L, 50L, 25L), Street.Code = c(100L, 
100L, 15L, NA, NA), City.Code = c(30L, 30L, 40L, NA, 0L)), class = "data.frame", row.names = c(NA, 
-5L))

【讨论】:

  • 谢谢,这段代码怎么知道选择哪一列?我没有看到它在任何地方显示
  • @ThePorcius 您好,亲爱的,所有列都包含代码,我已设置everything(),如果您需要特定列,请告诉我,我可以重新配置代码。
  • 完整的报告有超过 100 列,所以我只想抓取我感兴趣的代码并动态绘制它们。没有必要重写整个事情,因为我确信你的方法对于寻找类似东西的人来说非常有用,这是 Stackoverflow 的想法,但对于我的具体情况,我只想知道将一切()替换为比如说地址码
  • @ThePorcius 在这种情况下,请尝试使用反引号对旋转pivot_longer(Address Code) 进行此修改,然后仅重新调整该变量的形状。让我知道这是否有效!
猜你喜欢
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2020-10-11
相关资源
最近更新 更多