【问题标题】:R ggplot barchat unable to create proper labelsR ggplot barchat 无法创建正确的标签
【发布时间】:2016-02-21 18:04:31
【问题描述】:

我想绘制 5 年内排名前 10 位的财富 500 强公司的条形图,同时在条形图中将公司名称显示为标签。我面临以下问题: 1. y 轴上的每个等级应该是相同的大小,并且从上到下从 1 到 10 排序 2. 更好地展示公司名称标签。

我在问题 Plot a 'top 10' style list/ranking in R based on numerical column of dataframe 上找到了这个,但它使用数值来绘制。

这是我能够实现的目标:

# 2011 to 2015 top 10 Fortune 500 companies
year <- c('2015',  '2015',  '2015', '2015', '2015',
          '2015',   '2015', '2015', '2015', '2015', 
          '2014',   '2014', '2014', '2014', '2014', 
          '2014',   '2014', '2014', '2014', '2014',
          '2013',   '2013', '2013', '2013', '2013', 
          '2013',   '2013', '2013', '2013', '2013',
          '2012',   '2012', '2012', '2012', '2012',
          '2012', '2012',   '2012', '2012', '2012',
          '2011',   '2011', '2011', '2011', '2011', 
          '2011',   '2011', '2011', '2011', '2011'
          )
rank <- c('1',  '2',    '3',    '4',    '5',    '6',    '7',    '8',    '9',    '10',
          '1',  '2',    '3',    '4',    '5',    '6',    '7',    '8',    '9',    '10',
          '1',  '2',    '3',    '4',    '5',    '6',    '7',    '8',    '9',    '10',
          '1',  '2',    '3',    '4',    '5',    '6',    '7',    '8',    '9',    '10',   
          '1',  '2',    '3',    '4',    '5',    '6',    '7',    '8',    '9',    '10'
        )
companyname <- c('Walmart',  'Exxon Mobil', 'Chevron',  'Berkshire Hathaway',   'Apple',
                 'General Motors',  'Phillips 66',  'General Electrics',    'Ford Motor',   'CVS Health',
                 'Walmart', 'Exxon Mobil',  'Chevron',  'Berkshire Hathaway',   'Apple',
                 'Phillips 66', 'General Motors',   'Ford Motor',   'General Electrics',    'Valero Energy',
                 'Walmart', 'Exxon Mobil',  'Chevron',  'Phillips 66',  'Berkshire Hathaway',
                 'Apple',   'General Motors',   'General Electrics',    'Valero Energy',    'Ford Motor',
                 'Exxon Mobil', 'Walmart',  'Chevron',  'Conoco Phillips',  'General Motors',   
                 'General Electrics',   'Berkshire Hathaway',   'Fannie Mae',   'Ford Motor',   'Hewlett-Packard Company',
                 'Walmart', 'Exxon Mobil',  'Chevron',  'Conoco Phillips',  'Fannie Mae',   
                 'General Electrics',   'Berkshire Hathaway',   'General Motors',   'Bank of America Corporation',
                 'Ford Motor'
)
companysymbol <- c('WMT',  'XOM',   'CVX',  'BRK',  'AAPL', 'GM',   'PSX',  'GE',   'F',    'CVS',
                   'WMT',   'XOM',  'CVX',  'BRK',  'AAPL', 'PSX',  'GM',   'F',    'GE',   'VLO',
                   'WMT',   'XOM',  'CVX',  'PSX',  'BRK',  'AAPL', 'GM',   'GE',   'VLO',  'F',
                   'XOM',   'WMT',  'CVX',  'COP',  'GM',   'GE',   'BRK',  'FNMA', 'F',    'HPQ',
                   'WMT',   'XOM',  'CVX',  'COP',  'FNMA', 'GE',   'BRK',  'GM',   'BAC',  'F'
                 )
fortune500 <- as.data.frame(cbind(year,rank,companyname,companysymbol))

library(ggplot2)

p =  ggplot(fortune500,aes(x = year, y = rank, fill = as.factor(rank), label=(companyname))) +
  geom_bar(stat = "identity") +
  geom_text()

# PNG output
png(filename = "result/Fortune500.png")
# Render a barplot
print(p)
dev.off()

输出:

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    试试

    ggplot(fortune500,aes(x = year, y = 1, fill = as.factor(rank), label=(companyname))) +
      geom_bar(stat = "identity", position="stack") +
      geom_text(position="stack", vjust=1)
    

    【讨论】:

    • 感谢您的回答,这正是我想要的。我们可以颠倒y轴上的顺序以查看顶部的顶级公司吗?另外我怎样才能格式化公司名称以适合盒子并看起来很漂亮。
    • 您可以添加+ scale_y_reverse()。定义“漂亮”?
    • 谢谢卢克。一些公司的名字太长了,以至于它们渗入了其他酒吧。是否可以将文本格式化为适合它们的框而不溢出到相邻的栏。
    • 您可以减小文本大小(例如,geom_text 中的 size=1),您可以增加绘制图表的设备大小,或者您可以在某个数字后换行字符串字符数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2022-11-14
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多