ggplot2 Geom_Plot R маркировка точек на точечной диаграмме - PullRequest
0 голосов
/ 29 ноября 2018

Как бы я пометил точки на этом точечном графике, используя цифры вместо цветов?

Ниже приведен код, который я использую, вместо легенды, в которой говорится, какой цвет связан с тем, к какому изменению я бы хотел добавить его.использовать цифры.Трудно сказать, какого она цвета, поскольку я использую цветные панели.

Код:

d=data.frame(x1=c(.5,2,.5,2), 
             x2 = c(2,3.5,2,3.5), 
             y1 = c(.5,.5,2,2), 
             y2 = c(2,2,3.2,3.2), 
             t=c('low,low','high,low','low,high','high,high'), 
             r=c('low,low','high,low','low,high','high,high'))

ggplot() + 
  geom_point(data = df, aes(x=df$Impact, y=df$Likelihood, colour = df$Change)) + 
  scale_x_continuous(name = "Impact", limits = c(.5,3.5),
                     breaks=seq(.5,3.5, 1), labels = seq(.5,3.5, 1)) + 
  scale_y_continuous(name = "Likelihood", limits = c(.5,3.2),
                     breaks=seq(.5, 3.2, 1), labels = seq(.5, 3.2, 1)) +
  geom_rect(data=d, 
            mapping = aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2, fill = t), 
            alpha = .5, color = "black")+
  geom_text(data=d, 
            aes(x=x1+(x2-x1)/2, y=y1+(y2-y1)/2, label=r), 
            size=4)

Current Plot

Я бы хотелкаждый элемент, т. е. «Добавить сервер», соответствует уникальному целому числу, а затем для этого целого числа, которое должно быть нанесено на график.Спасибо

Редактировать:

Структура кадра данных:

Image of the Data

Столбцы: Изменить (строка), Влияние (плавать)Вероятность (float)

dput(df)
structure(list(Change = c("Windows Patches\n-CRPDB1", "Change DNS settings", 
"SSIS Schedule change\n-Warehouse", "OnBase Upgrade", "Add Server", 
"Change IL Parameter", "Code Change - Validation missing", "Mass Update Data in Infolease", 
"User add, remove or update user permission", "ServiceNow Deployment", 
"Creating of a sever or desktop image for mass deployment", "Database table update. Column add/modify", 
"Update add PRTG/Sensor"), Impact = c(3, 1.8, 2.6, 2.3, 1, 2.25, 
1.8, 1.95, 1.3, 1.5, 1.8, 1, 1), Likelihood = c(3, 1.75, 1.7, 
1.6, 1.3, 1.15, 1.15, 1.15, 1.15, 1.1, 1, 1, 1)), class = "data.frame", row.names = c(NA, 
-13L))

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вы можете сохранить эстетическое отображение между изменением и цветом, чтобы создать легенду, при этом устанавливая этот слой невидимым, чтобы он не отвлекал от общего изображения:

df$ID <- seq(1, nrow(df))
df$Legend <- paste0(df$ID, ". ", df$Change)
df$Legend <- factor(df$Legend,
                    levels = df$Legend[order(df$ID)])

p <- ggplot() + 

  # text layer to position the numbers
  geom_text(data = df,
            aes(x = Impact, y = Likelihood, label = ID)) +

  # invisible layer to create legend for the numbers
  geom_point(data = df,
             aes(x = Impact, y = Likelihood, colour = Legend),
             alpha = 0, size = 0) +

  # rest of the code is unchanged
  scale_x_continuous(name = "Impact", limits = c(.5,3.5),
                     breaks=seq(.5,3.5, 1), labels = seq(.5,3.5, 1)) + 
  scale_y_continuous(name = "Likelihood", limits = c(.5,3.2),
                     breaks=seq(.5, 3.2, 1), labels = seq(.5, 3.2, 1)) +
  geom_rect(data=d, 
            aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2, fill = t), 
            alpha = .5, color = "black") +
  geom_text(data=d, 
            aes(x=x1+(x2-x1)/2, y=y1+(y2-y1)/2, label=r), 
            size=4)

p

plot

Кроме того, если вы хотите удалить пустые серые ключи условных обозначений, установите для его ширины ключа значение 0:

p + scale_color_discrete(guide = guide_legend(keywidth = unit(0, "pt")))

plot2

0 голосов
/ 29 ноября 2018

Я не могу придумать, как это сделать, используя только функции ggplot2, но, возможно, есть элегантный способ сделать это.Вместо этого вы можете использовать gridExtra и tableGrob для отображения правильной легенды.

Я заменяю ваш звонок на geom_point() звонком на geom_text(), преобразую в гроб, затем создаю гроб таблицы с текстом, который вы хотите отобразить в легенде, и, наконец, расположите два гроба.

# load your data as d and df

library(grid)
library(gridExtra)

# add in a Label column with numbers
df$Label <- 1:nrow(df)

g2 <- ggplot() + 
  geom_text(data = df, aes(x = Impact, y = Likelihood, label = Label)) +
  scale_x_continuous(
    name = "Impact", 
    limits = c(.5,3.5),
    breaks=seq(.5,3.5, 1), 
    labels = seq(.5,3.5, 1)
  ) + 
  scale_y_continuous(
    name = "Likelihood", 
    limits = c(.5,3.2),
    breaks=seq(.5, 3.2, 1), 
    labels = seq(.5, 3.2, 1)
  ) +
  geom_rect(
    data = d, 
    mapping = aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2, fill = t), 
    alpha = .5, 
    color = "black"
  ) +
  geom_text(data = d, aes(x=x1+(x2-x1)/2, y=y1+(y2-y1)/2, label=r), size=4)

g2_grob <- ggplotGrob(g2)

# pasted the two columns together for it to appear a little nicer
tab_leg <- tableGrob(
  paste(df$Label,"-", df$Change),
  theme = ttheme_minimal(
    core = list(fg_params = list(hjust=0, x=0.1,fontsize=8))
  )
)

# arrange the plot and table
grid.arrange(arrangeGrob(
  g2_grob, nullGrob(), tab_leg, nullGrob(),
  layout_matrix = matrix(1:4, ncol = 4), 
  widths = c(6,.5,2,1)
))

Если вы хотите переместить легенду региона, вы можете проверить этот ответ: Показать таблицу значений под гистограммой .

...