#r #graph #statistics #ggplot2 #visualization
#r #График #Статистика #ggplot2 #визуализация
Вопрос:
Я пытаюсь создать частотный график количества появлений типа графика по годам. Я некоторое время играл с ggplot2, но я думаю, что это выше моей головы (я только начинаю с R)
Я приложил схему того, как я хотел бы, чтобы результат выглядел. Одна из других проблем, с которыми я сталкиваюсь, заключается в том, что уже много лет типы графиков не отображаются. Есть ли способ исключить тип графика, если он не отображается в этом году?
например, в 1940 году нет «социограммы», я не хочу иметь кучу строк в 0…
year <- c("1940","1940","1940","1940","1940","1940","1940","1940","1940","1940","1940","1941","1941","1941","1941","1941","1941","1941","1941","1941","1941","1941","1941","1941","1941")
type <- c("Line","Column", "Stacked Column", "Scatter with line", "Scatter with line", "Scatter with line", "Scatter with line", "Map with distribution","Line","Line","Line","Bar","Bar","Stacked bar","Column","Column","Sociogram","Sociogram","Column","Column","Column","Line","Line","Line","Line")
ytmatrix <- cbind(as.Date(as.character(year), "%Y", type))
Пожалуйста, дайте мне знать, если что-то не имеет смысла. StackOverflow быстро становится одним из моих любимых сайтов!
Спасибо, Джон
Вот что у меня есть до сих пор… Еще раз спасибо за вашу помощь!
И вот как я это сделал (я пока не могу поделиться файлом данных, поскольку мы надеемся использовать его для публикации, но область ggplot, вероятно, более интересна, хотя я на самом деле не сделал ничего нового / это не обсуждалось в сообщении):
AJS = read.csv(data) #read in file
Type = AJS[,17] #select and name "Type" column from csv
Year = AJS[,13] #select and name "Year" column from csv
Year = substr(Year,9,12) #get rid of junk from year column
Year = as.Date(Year, "%Y") #convert the year character to a date
Year = format(Year, "%Y") #get rid of the dummy month and day
Type = as.data.frame(Type) #create data frame
yt <- cbind(Year,Type) #bind the year and type together
library(ggplot2)
trial <- ggplot(yt, aes(Year,..count.., group= Type)) #plot the data followed by aes(x- axis, y-axis, group the lines)
geom_density(alpha = 0.25, aes(fill=Type))
opts(axis.text.x = theme_text(angle = 90, hjust = 0)) #adjust the x axis ticks to horizontal
opts(title = expression("Trends in the Use of Visualizations in The American Journal of Sociology")) #Add title
scale_y_continuous('Appearances (10 or more)') #change Y-axis label
trial
Комментарии:
1. Не имеет смысла пытаться вставить переменную даты в матрицу, даже после того, как вы замените отсутствующую правую скобку.
2. Я не уверен, что это причина, по которой он не работает…
3. На данный момент они оба являются «символьными». Попытка вычислить плотности (что, по-видимому, является вашей целью) для значений символов может быть затруднена.
4. Ах. итак, класс «Дата» — это просто символ? Единственная причина, по которой я преобразовал годы в даты, заключалась в том, что я думал, что это то, что требуется ggplot. Я мог бы преобразовать его в число, если это упростит анализ, но когда я это сделал, я тоже не смог заставить его работать. Т.е. Год был числовым, а тип — символьным, и это тоже не сработало.
5. Дело в том, что использование cbind заставляет все значения терять класс и становиться «символьными».
data.frame
в любом случае, он более гибкий иggplot
дружелюбный.
Ответ №1:
Это может быть более интересным фреймом данных для экспериментов:
df1 <- data.frame(date = as.Date(10*365*rbeta(100, .5, .1)),group="a")
df2 <- data.frame(date = as.Date(10*365*rbeta(50, .1, .5)),group="b")
df3 <- data.frame(date = as.Date(10*365*rbeta(25, 3,3)),group="c")
dfrm <- rbind(df1,df2,df3)
Я думал, что работа с примером на странице справки (stat_density) будет работать, но это не так:
m <- ggplot(dfrm, aes(x=date), group=group)
m geom_histogram(aes(y=..density..)) geom_density(fill=NA, colour="black")
Однако пример, который я нашел при поиске в архивах hte, обнаружил публикацию @Hadley Wickham, которая действительно работает:
m geom_density(aes(fill=group), colour="black")
Комментарии:
1. Спасибо. Это было действительно полезно. Особенно при форматировании даты. Еще раз спасибо!
2. Я вижу, вы обнаружили прозрачность и сделали график еще лучше с помощью альфа-аргумента. Хорошая работа.