Построение различий с помощью ggplot2
У меня есть R dataframe (названный frequency
) как это:
word author proportion
a Radicals 1.679437e-04
aa Radicals 2.099297e-04
aaa Radicals 2.099297e-05
abbe Radicals NA
aboow Radicals NA
about Radicals NA
abraos Radicals NA
ytterst Conservatives 5.581042e-06
yttersta Conservatives 5.581042e-06
yttra Conservatives 2.232417e-05
yttrandefrihet Conservatives 5.581042e-06
yttrar Conservatives 2.232417e-05
Я хочу нанести на карту различия документа, используя ggplot2. Как то так
У меня есть код ниже, но мой сюжет заканчивается пустым.
library(scales)
ggplot(frequency, aes(x = proportion, y = `Radicals`, color = abs(`Radicals` - proportion))) +
geom_abline(color = "gray40", lty = 2) +
geom_jitter(alpha = 0.1, size = 2.5, width = 0.3, height = 0.3) +
geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
scale_x_log10(labels = percent_format()) +
scale_y_log10(labels = percent_format()) +
scale_color_gradient(limits = c(0, 0.001), low = "darkslategray4", high = "gray75") +
facet_wrap(~author, ncol = 2) +
theme(legend.position="none") +
labs(y = "Radicals", x = NULL)
2 ответа
Если вы хотите сделать график, сравнивающий частоту одного "автора" (например, консерваторов) по оси X и одного "автора" (возможно, радикалов) по оси Y, вам необходимо spread
ваш фрейм данных (из пакета tidyr), чтобы вы могли построить его таким образом.
library(tidyverse)
library(scales)
frequency %>%
spread(author, proportion) %>%
ggplot(aes(Conservatives, Radicals)) +
geom_abline(color = "gray40", lty = 2) +
geom_point() +
geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
scale_x_log10(labels = percent_format()) +
scale_y_log10(labels = percent_format())
Ваш сюжет заканчивается пустым, потому что нет колонки "Радикалы". если вы пытаетесь сузить радикалы, а затем заговор, что вы должны сделать что-то вроде
radical_frequecy <- subset(frequency, author == 'Radicals')
тогда вы можете сделать
library(scales)
ggplot(radical_frequency, aes(x = proportion, y = author, color = abs(`Radicals` - proportion))) +
geom_abline(color = "gray40", lty = 2) +
geom_jitter(alpha = 0.1, size = 2.5, width = 0.3, height = 0.3) +
geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
scale_x_log10(labels = percent_format()) +
scale_y_log10(labels = percent_format()) +
scale_color_gradient(limits = c(0, 0.001), low = "darkslategray4", high = "gray75") +
theme(legend.position="none") +
labs(y = "Radicals", x = NULL)
(Я снял фасетную обертку, так как вы уже сузились до Radicals. Вы можете добавить это обратно, а затем сделать первый бит кода, если вы сделали y=author и facet_wrap(~author, ncol = 2)
в основном, tl:dr ваша ошибка вызвана попыткой создать ось из переменной, а не столбца