как сделать так, чтобы xlab совпадал с его представлением (barplot) в R - PullRequest
1 голос
/ 03 апреля 2019

У меня есть файл .csv, в котором есть города.Такой файл выглядит так:

city_name
madrid
barcelona
barcelona
madrid
sevilla
sevilla
madrid
sevilla
barcelona
palma
madrid
leon
sevilla
cadiz
sevilla
cadiz
barcelona
leon
cadiz
cadiz
barcelona
madrid
leon
leon
leon
madrid
madrid
sevilla
barcelona
palma
leon
cadiz
palma

Я хочу представить barplot.Это то, что у меня есть:

enter image description here

Но, как вы могли заметить, leon появляется не 3 раза, а 6 (такой городвместо palma).Барплот правильный, но xlab (ось X) не совпадает с тем, что он изображен.

Мой код в R-Shiny:

library(shiny)

ui <- fluidPage(
  plotOutput("cities")
)

server <- function(input, output) {
  wd.datapath = paste0(getwd(), "/assets")
  wd.init = getwd();
  setwd(wd.datapath)

  d.in = read.csv("cities.csv", header = TRUE)

  cities = d.in$city_name

  unique_cities = unique(cities)

  output$cities <- renderPlot({
    barplot(table(c(cities)), names = unique(cities))
  })
}

shinyApp(ui = ui, server = server)

Как мне этого добиться?Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2019

Просто удалите аргумент names и установите barplot по умолчанию для атрибута names вывода table.Тогда как table сортирует значения в алфавитном порядке, unique() возвращает отдельный список значений в порядке, представленном в данных.

cities = c("madrid", "barcelona", "barcelona", "madrid", "sevilla", "sevilla", "madrid", 
           "sevilla", "barcelona", "palma", "madrid", "leon", "sevilla", "cadiz", "sevilla", 
           "cadiz", "barcelona", "leon", "cadiz", "cadiz", "barcelona", "madrid", "leon", 
           "leon", "leon", "madrid", "madrid", "sevilla", "barcelona", "palma", "leon", "cadiz", "palma")

table(cities)
# cities
# barcelona     cadiz      leon    madrid     palma   sevilla 
#         6         5         6         7         3         6

unique(cities)
# [1] "madrid"    "barcelona" "sevilla"   "palma"     "leon"      "cadiz"  

barplot(table(cities))

Plot Output

0 голосов
/ 03 апреля 2019

Заменить строку 19 на barplot(table(cities)).Вы используете функцию c(), которая в основном извлекает вектор целых чисел, и именно это R фактически представляет независимо от аргумента names.

library(shiny)

ui <- fluidPage(
  plotOutput("cities")
)

server <- function(input, output) {
  wd.datapath = paste0(getwd(), "/assets")
  wd.init = getwd();
  setwd(wd.datapath)

  d.in = read.csv("cities.csv", header = TRUE)

  cities = d.in$city_name

  unique_cities = unique(cities)
  print(c(cities))
  output$cities <- renderPlot({
    barplot(table(cities))
  })
}

shinyApp(ui = ui, server = server)

Результат:

enter image description here

0 голосов
/ 03 апреля 2019

Я думаю, что если вы отредактируете свой фрагмент кода следующим образом, он может работать для вас:

output$cities <- renderPlot({
    summary <- as.data.frame(table(c(cities)))
    barplot(summary$Freq, names = summary$Var1)
  })
...