Это довольно просто, ключ состоит в том, чтобы получить данные из его текущего широкоформатного формата в длинный формат, который более полезен для построения графика в R. И используйте geom_point
, а не geom_bar
.
Во-первых, некоторые воспроизводимый пример данных (которые вы должны использовать снова в вашем вопросе, если вы разместите другой вопрос здесь, делает его гораздо проще для других, чтобы помочь вам):
library(ggplot2)
library(reshape2)
dataset <- data.frame(
PlayerName = letters[1:6],
IsolationPossG = runif(6),
HandoffPossG = runif(6),
OffScreenPossG = runif(6)
)
Это текущие данные, в широком формате:
dataset
PlayerName IsolationPossG HandoffPossG OffScreenPossG
1 a 0.78184751 0.939183520 0.74461784
2 b 0.06557433 0.745699149 0.96540299
3 c 0.21105745 0.753534811 0.02977973
4 d 0.41271918 0.555475622 0.18317886
5 e 0.38153149 0.246292074 0.74862310
6 f 0.89946318 0.008412111 0.53195933
Теперь мы преобразуем в длинном формате:
molten <- melt(
dataset,
id.vars = "PlayerName",
measure.vars = c("IsolationPossG", "HandoffPossG", "OffScreenPossG")
)
Вот длинный формат, гораздо полезнее для построения в R:
head(molten)
PlayerName variable value
1 a IsolationPossG 0.78184751
2 b IsolationPossG 0.06557433
3 c IsolationPossG 0.21105745
4 d IsolationPossG 0.41271918
5 e IsolationPossG 0.38153149
6 f IsolationPossG 0.89946318
Вот как сюжет его:
ggplot(molten, aes(x = variable, y = value, colour = PlayerName)) +
geom_point(size = 4) +
theme_bw() +
theme(legend.position="bottom",legend.direction="horizontal")
Что дает:
ч/т how to have multple labels in ggplot2 for bubble plot
Если вы хотите, чтобы форма da та точка зависит от имени, как ваш пример изображения показывает (но это кажется довольно чрезмерным, чтобы иметь переменное имя игрока на два эстетике сюжета в):
ggplot(molten, aes(x = variable, y = value, shape = PlayerName, colour = PlayerName)) +
geom_point(size = 4) +
theme_bw() +
theme(legend.position="bottom",legend.direction="horizontal")
спасибо это прекрасно! Идея превратить каждую строку в уникальную ценность перешла мне на ум, но я не понимал, как легко было бы с чем-то вроде расплава(). Также, как вы форматировали свои фреймы данных при комментировании StackoverFlow? Я попытался использовать Markdown, но это не сработало. – sdr1975
Добро пожаловать, конверсия с широким диапазоном является фундаментальной частью подготовки множества наборов данных для анализа и построения графиков, поэтому это полезное умение знать. Чтобы отформатировать кадры данных в моем ответе, я выбрал текст и воспользовался кнопкой форматирования кода, см. Здесь для получения более подробной информации: http://meta.stackexchange.com/a/22189/181565 – Ben