# Checks if RCurl is installed. If not, installs it.
if (sum(installed.packages()[, 1] == "RCurl") < 1) install.packages("RCurl")
suppressMessages(suppressWarnings(library(RCurl)))
if (sum(installed.packages()[, 1] == "ggplot2") < 1) install.packages("ggplot2")
library(ggplot2)
if (sum(installed.packages()[, 1] == "magrittr") < 1) install.packages("magrittr")
library(magrittr)
if (sum(installed.packages()[, 1] == "dplyr") < 1) install.packages("dplyr")
suppressMessages(suppressWarnings(library(dplyr)))
if (sum(installed.packages()[, 1] == "devtools") < 1) install.packages("devtools")
library(devtools)
# Install ggthemr
if (sum(installed.packages()[, 1] == "ggthemr") < 1) devtools::install_github('cttobin/ggthemr')
## Theme
library('ggthemr')
suppressWarnings(ggthemr('grass'))
# Download CSV
filename <- "https://docs.google.com/spreadsheets/d/e/2PACX-1vQ4RIK8_J5GKNi0dfY8HqGABoC8HfVnImLG0JBLC3nwgD7NfOv-jAsInWICbhIcQ1HiYkq5YkVlcEIl/pub?gid=968676818&single=true&output=csv"
txt = tryCatch(getURL(filename, .encoding='UTF-8'),
error = function(e) {
getURL(filename, .encoding='UTF-8', ssl.verifypeer = FALSE)
})
tc = textConnection(txt) # Opens a connection.
survey.results <- read.csv(tc, header = T, stringsAsFactors = TRUE, na.strings = "")
close(tc) # Closes the connection.
rm(txt, tc, filename) # Cleans up the workspace.
統計資料
本次問卷回收 482 份,男性佔 67.8%、女性佔 32.2%.
survey.results %>%
ggplot(aes(x=factor(X1.性別), fill=factor(X2.年齡))) +
geom_bar(stat = "count") +
geom_text(stat='count', aes(label=..count.., x=factor(X1.性別)), position = position_stack(vjust = 0.5), size=2.5) +
scale_y_continuous(name="人數", breaks=waiver(), position = "left") +
scale_x_discrete(name="性別") +
scale_fill_brewer(name="年齡", palette="YlOrBr")

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQojIENoZWNrcyBpZiBSQ3VybCBpcyBpbnN0YWxsZWQuIElmIG5vdCwgaW5zdGFsbHMgaXQuCmlmIChzdW0oaW5zdGFsbGVkLnBhY2thZ2VzKClbLCAxXSA9PSAiUkN1cmwiKSA8IDEpIGluc3RhbGwucGFja2FnZXMoIlJDdXJsIikKc3VwcHJlc3NNZXNzYWdlcyhzdXBwcmVzc1dhcm5pbmdzKGxpYnJhcnkoUkN1cmwpKSkKaWYgKHN1bShpbnN0YWxsZWQucGFja2FnZXMoKVssIDFdID09ICJnZ3Bsb3QyIikgPCAxKSBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikKbGlicmFyeShnZ3Bsb3QyKQppZiAoc3VtKGluc3RhbGxlZC5wYWNrYWdlcygpWywgMV0gPT0gIm1hZ3JpdHRyIikgPCAxKSBpbnN0YWxsLnBhY2thZ2VzKCJtYWdyaXR0ciIpCmxpYnJhcnkobWFncml0dHIpCmlmIChzdW0oaW5zdGFsbGVkLnBhY2thZ2VzKClbLCAxXSA9PSAiZHBseXIiKSA8IDEpIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikKc3VwcHJlc3NNZXNzYWdlcyhzdXBwcmVzc1dhcm5pbmdzKGxpYnJhcnkoZHBseXIpKSkKaWYgKHN1bShpbnN0YWxsZWQucGFja2FnZXMoKVssIDFdID09ICJkZXZ0b29scyIpIDwgMSkgaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQpsaWJyYXJ5KGRldnRvb2xzKQojIEluc3RhbGwgZ2d0aGVtcgppZiAoc3VtKGluc3RhbGxlZC5wYWNrYWdlcygpWywgMV0gPT0gImdndGhlbXIiKSA8IDEpIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1YignY3R0b2Jpbi9nZ3RoZW1yJykKIyMgVGhlbWUgCmxpYnJhcnkoJ2dndGhlbXInKQpzdXBwcmVzc1dhcm5pbmdzKGdndGhlbXIoJ2dyYXNzJykpCmBgYAoKCmBgYHtyfQojIERvd25sb2FkIENTVgpmaWxlbmFtZSA8LSAiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvZS8yUEFDWC0xdlE0UklLOF9KNUdLTmkwZGZZOEhxR0FCb0M4SGZWbkltTEcwSkJMQzNud2dEN05mT3YtakFzSW5XSUNiaEljUTFIaVlrcTVZa1ZsY0VJbC9wdWI/Z2lkPTk2ODY3NjgxOCZzaW5nbGU9dHJ1ZSZvdXRwdXQ9Y3N2Igp0eHQgPSB0cnlDYXRjaChnZXRVUkwoZmlsZW5hbWUsIC5lbmNvZGluZz0nVVRGLTgnKSwgCiAgICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rpb24oZSkgewogIGdldFVSTChmaWxlbmFtZSwgLmVuY29kaW5nPSdVVEYtOCcsIHNzbC52ZXJpZnlwZWVyID0gRkFMU0UpCn0pCnRjID0gdGV4dENvbm5lY3Rpb24odHh0KSAgIyBPcGVucyBhIGNvbm5lY3Rpb24uCnN1cnZleS5yZXN1bHRzIDwtIHJlYWQuY3N2KHRjLCBoZWFkZXIgPSBULCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSwgbmEuc3RyaW5ncyA9ICIiKQpjbG9zZSh0YykgICMgQ2xvc2VzIHRoZSBjb25uZWN0aW9uLgpybSh0eHQsIHRjLCBmaWxlbmFtZSkgICMgQ2xlYW5zIHVwIHRoZSB3b3Jrc3BhY2UuCmBgYAoKCiMg57Wx6KiI6LOH5paZCgrmnKzmrKHllY/ljbflm57mlLYgNDgyIOS7ve+8jOeUt+aAp+S9lCA2Ny44JeOAgeWls+aAp+S9lCAzMi4yJS4KCmBgYHtyfQpzdXJ2ZXkucmVzdWx0cyAlPiUKICBnZ3Bsb3QoYWVzKHg9ZmFjdG9yKFgxLuaAp+WIpSksIGZpbGw9ZmFjdG9yKFgyLuW5tOm9oSkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsKICBnZW9tX3RleHQoc3RhdD0nY291bnQnLCBhZXMobGFiZWw9Li5jb3VudC4uLCB4PWZhY3RvcihYMS7mgKfliKUpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemU9Mi41KSArCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9IuS6uuaVuCIsIGJyZWFrcz13YWl2ZXIoKSwgcG9zaXRpb24gPSAibGVmdCIpICsKICBzY2FsZV94X2Rpc2NyZXRlKG5hbWU9IuaAp+WIpSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lPSLlubTpvaEiLCBwYWxldHRlPSJZbE9yQnIiKSAKCmBgYAo=