4

我有一个这样的数据集(为说明目的而简化):

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,
  • 并且 y 轴是 1-10 的比例,每个公司的价值都被标准化到该比例。(我当然可以在 R 之外进行标准化,但我相信 R 可以做到这一点。)

需要明确的是,每家公司都将出现在结果的每一列中,例如 ExxonMobil 将出现在 Institutions.Own 列和 Price.Earnings 列的底部附近;理想情况下,公司名称会出现在两个气泡中或旁边。

4

1 回答 1

6

我认为这涉及到你的所有观点。注意 - 你Institutions.Own被读入是因为%......我只是为了方便而删除了它......你需要在某个地方解决这个问题。完成后,我将相应地使用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()

结果是:

在此处输入图像描述

于 2013-05-16T04:00:17.333 回答