#r #ggplot2 #plot #dplyr
Вопрос:
Я должен воспроизвести следующий график, используя ggplot2 в R
Это моя попытка:
library(dplyr) library(scales) d lt;- data.frame(x=c(4.5,9,5.5), y=c(3.5,2.5,8)) f lt;- data.frame(x=c(9,10,5.5), y=c(2.5,2.5,8)) df lt;- data.frame(x1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) , y1 = c(1, 4, 2.5, 4.5, 5.5, 8.5, 2.5, 1, 1.5, 2.5), x2 = 1:10, y2 = 1:10, x3 = c(2.1875, 5.8125, 6.25, 8.125, 9.3125), y3 = c(7.5, 6.375, 3, 3.875, 2.1875), x4 = c(1.3125, 1.5, 1.6875, 3.6875, 7.25), y4 = c(7.1875, 9.9375, 9.0625, 9.375, 3.8125)) grafico_4 lt;- ggplot(df) ggtitle("Grafico variado") theme(plot.title = element_text(size = 10)) theme(panel.background = element_rect(fill='white', colour='white')) theme( axis.line = element_line(colour = "black", size = 0.5)) scale_y_discrete(limits = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")) scale_x_discrete(limits = factor(1:10), labels = c("uno", "", "tres", "", "cinco", "", "siete", "", "nueve", "")) geom_polygon(data = d, mapping=aes(x = x, y = y), color = "white", alpha = 3, fill = "#AED9E6") geom_polygon(data = f, mapping=aes(x = x, y = y), color = "white", alpha = 3, fill = "#AED9E6") geom_hline(yintercept = 5, linetype = "dotted") xlab("") ylab("") geom_line(aes(x = x1, y = y1), size = 1, alpha = 0.9, linetype = 2) geom_point(aes(x = x2, y = y2), shape = 1) geom_point(aes(x = x3, y = y3), shape = 1, color = "red") geom_point(aes(x = x4, y = y4), shape = 3, color = "green", size = 0.8) annotate(geom = "text", x = 1.7, y = 7.5, label = "cinco", color = "purple", size = 3) annotate(geom = "text", x = 2, y = 6, label = "dos", color = "yellow", size = 3) annotate(geom = "text", x = 6.625, y = 9.125, label = "cuatro", color = "blue", size = 3) annotate(geom = "text", x = 7.875, y = 2, label = "tres", color = "green", size = 3)
что дает следующий сюжет
Теперь очевидно, что
- Моя пунктирная линия выглядит странно
- Моя ось x должна быть больше
- Через мой многоугольник проходит белая линия
Как я могу исправить свой график?
Ответ №1:
- Изменение
color="white"
наcolor = "#AED9E6"
в ваших многоугольниках должно позаботиться о белой линии, если края будут нарисованы тем же цветом, что и заливка (или укажите многоугольник с одним набором вершин, а не как объединение двух треугольников …) - Я не уверен, что вы считаете «странным» в своих пунктирных линиях
- самый простой способ изменить соотношение сторон и/или относительный размер текста и объектов-
ggsave()
использовать заданные высоту и ширину.
Ответ №2:
Проблема (для пунктов 1 и 2) заключается не в использовании вами ggplot, а скорее в том, что вы не смогли настроить устройство вывода так, как ожидали. Это устройство, которое управляет вашим соотношением сторон. Неустойчивость пунктирных линий обусловлена низким разрешением вашего устройства (которое может быть устройством экрана по умолчанию для компьютера с низким разрешением вывода). Вы можете контролировать это, увеличивая «плотность пикселей» (dpi). (Мне не нужно было увеличивать значение по умолчанию для png
устройства, потому что оно уже создает лучшее отображение тире, но при необходимости вы можете изменить его, используя параметры, перечисленные на странице справки: ?png
png("test",width=700, height=480) grafico_4 dev.off()
BB уже описал, как исправить белую линию на пересечении.