Как создать сложную пузырьковую диаграмму в R

У меня есть такой набор данных (упрощенный для наглядности):

zz <- textConnection("Company   Market.Cap  Institutions.Own    Price.Earnings  Industry
 ExxonMobil 405.69  50% 9.3 Energy
 Citigroup  156.23  67% 18.45   Banking
 Pfizer 212.51  73% 20.91   Pharma
 JPMorgan   193.1   75% 9.12    Banking
 ")
Companies <- read.table(zz, header= TRUE)
close(zz)

Я хотел бы создать пузырьковую диаграмму (ну, что-то вроде пузырьковой диаграммы) со следующими свойствами:

  • каждый пузырь - это компания, размер которой привязан к рыночной капитализации,
  • цвет пузыря, привязанного к промышленности,
  • с осью x, имеющей две категории: Industries.Own и Price.Earnings,
  • а по оси ординат - шкала от 1 до 10, где значения каждой компании нормализованы по этой шкале. (Я, конечно, мог бы выполнить нормализацию вне R, но я считаю, что R делает это возможным.)

Для ясности: каждая компания будет отображаться в каждом столбце результата, например ExxonMobil будет находиться в нижней части столбца Institutions.Own и столбца Price.Earnings; в идеале название компании должно было бы отображаться на обоих пузырях или рядом с ними.


person Tom Hughes    schedule 16.05.2013    source источник


Ответы (1)


Думаю, это касается всех ваших вопросов. Обратите внимание: ваш Institutions.Own считывается как фактор из-за _2 _... Я просто удалил это для упрощения времени ... вам нужно где-то это исправить. Как только это будет сделано, я бы использовал ggplot и соответствующим образом сопоставил бы вашу другую эстетику. Вы можете поиграть с названиями осей и др., Если вам нужно.

#Requisite packages
library(ggplot2)
library(reshape2)
#Define function, adjust this as necessary
rescaler <- function(x) 10 * (x-min(x)) / (max(x)-min(x))
#Rescale your two variables
Companies$Inst.Scales <- with(Companies, rescaler(Institutions.Own))
Companies$Price.Scales <- with(Companies, rescaler(Price.Earnings))
#Melt into long format
Companies.m <- melt(Companies, measure.vars = c("Inst.Scales", "Price.Scales"))
#Plotting code
ggplot(Companies.m, aes(x = variable, y = value, label = Company)) +
  geom_point(aes(size = Market.Cap, colour = Industry)) + 
  geom_text(hjust = 1, size = 3) +
  scale_size(range = c(4,8)) +
  theme_bw()

Результаты в:

введите описание изображения здесь

person Chase    schedule 16.05.2013