Это частично связано с моим вчера вопросом.
Итак, вот данные и график, созданные в ggplot2.
df = data.frame(date=c(rep(2008:2013, by=1)),
value=c(303,407,538,696,881,1094))
ggplot(df, aes(date, value, width=0.64)) +
geom_bar(stat = "identity", fill="#336699", colour="black") +
ylim(c(0,1400)) + opts(title="U.S. Smartphone Users") +
opts(axis.text.y=theme_text(family="sans", face="bold")) +
opts(axis.text.x=theme_text(family="sans", face="bold")) +
opts(plot.title = theme_text(size=14, face="bold")) +
xlab("Year") + ylab("Users (in millions)") +
opts(axis.title.x=theme_text(family="sans")) +
opts(axis.title.y=theme_text(family="sans", angle=90)) +
geom_segment(aes(x=2007.6, xend=2013, y=550, yend=1350), arrow=arrow(length=unit(0.4,"cm")))
Можно ли построить волнистую линию тренда на следующем графике с помощью ggplot2
Я создал график в R, а затем обработал его в Adobe Photoshop, и мне интересно, можно ли было построить эту волнистую линию тренда прямо в R.
Если это невозможно сделать в ggplot2, есть ли какие-то конкретные пакеты R, которые можно было бы решить для этой задачи?
Я не спрашиваю о воспроизведении графика. Это не проблема. Кажется, проблема заключается только в построении линии тренда.
2 ответа
Согласно всем комментариям: волнистая линия сомнительна с научной точки зрения, поскольку не основана на статистической модели данных. (И это, кажется, показывает, что количество пользователей смартфонов выравнивается, когда данные не показывают этого.) Так что лучший совет - «не делай этого».
Но поскольку вы, кажется, действительно увлечены этой идеей, да, это возможно.
Вы можете добавить любую строку с помощью geom_line
. Чтобы воспроизвести глупую линию в своей инфографике, вы можете нарисовать прямую линию плюс синусоидальную кривую, чтобы она пошевелилась. Предполагая, что ваш участок был назван p
p + geom_line(
aes(date, value),
data = data.frame(
date = seq(2008, 2013, length.out = n),
value = seq(600, 1300, length.out = n) + 100 * sin(seq(0, 4 * pi, length.out = n))
),
arrow = arrow(length = unit(0.4, "cm"))
)
Лучше использовать кривую, сглаженную по лёссу.
p + geom_smooth(method = "loess", se = FALSE) #maybe also span = 0.5, for extra wigglyness.
Ответ на ваш вопрос однозначно: не делайте этого с R. R не оптимизирован для этого. Вы будете быстрее и ближе к тому, что хотите, если воспользуетесь какой-нибудь программой векторной графики. Используйте Illustrator, Inkscape (бесплатно) или любой другой графический инструмент, который вам нравится. Возможно, вы также захотите создать график в R и изменить его позже в одной из этих программ.
Я понимаю комментарии, а также согласен с тем, что этот график не проходит некоторые тесты. Не только академические тесты, но и тест на внешний вид, не застрявший в девяностых. Это упоминание Эдварда Тафте было также из эстетических соображений. Однако я думаю, что это законный вопрос, который не заслуживает отрицательного голосования только потому, что график выглядит некрасиво. Иногда ученым также необходимо опубликовать свои материалы за пределами академических журналов, и графика в конечном итоге редактируется редакторами для масс. Так что, зная заранее - лучше не пытаться делать такие вещи с R, может быть примечательно.
Похожие вопросы
Связанные вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.