首页 > 解决方案 > 在 y 轴上的下一个值之间留出空间

问题描述

这是我的图表代码的样子:

  ggplot(dane, aes(x=państwo, y=całkowiteZarobki)) + 
  geom_point(aes(col=rodzajSportu, size=całkowiteZarobki)) +
  geom_smooth(method="loess", se=F) + 
  labs(subtitle="Area Vs Population", 
       y="Population", 
       x="Area", 
       title="Scatterplot", 
       caption = "Source: midwest")+
  theme(text = element_text(size=15),axis.text.x = element_text(angle=90, hjust=1))

我一直在寻找如何解决这个问题几个小时,遗憾的是我没有找到解决方案。我还按照您的建议添加了我的数据的外观。这是它的样子:

Rank              Name      Sport    Total.Pay Salary.Winnings Endorsements             Nation Gender Year.of.birth
1    55     Aaron Rodgers   Football  $22,000,000     $14,500,000   $7,500,000      United States   Male          1983
2    95        Adam Scott       Golf  $17,700,000      $8,700,000   $9,000,000          Australia   Male          1980
3    60   Adrian Gonzalez   Baseball  $21,500,000     $21,100,000     $400,000      United States   Male          1982
4    48    Alex Rodriguez   Baseball  $22,900,000     $22,600,000     $300,000      United States   Male          1975
5    93   Alfonso Soriano   Baseball  $18,050,000     $18,000,000      $50,000 Dominican Republic   Male          1976
6    27 Amar'e Stoudemire Basketball  $26,700,000     $21,700,000   $5,000,000      United States   Male          1982
7    75        Barry Zito   Baseball  $20,400,000     $20,300,000     $100,000      United States   Male          1978
8    47     Blake Griffin Basketball  $23,000,000     $16,500,000   $6,500,000      United States   Male          1989
9    91    Branden Albert   Football  $18,435,000     $18,400,000      $35,000      United States   Male          1984
10   97  Brandon Marshall   Football  $17,500,000     $16,800,000     $700,000      United States   Male          1984
11   74     Carl Crawford   Baseball  $20,500,000     $20,200,000     $300,000      United States   Male          1981
12   84     Carlos Dunlap   Football  $18,750,000     $18,700,000      $50,000      United States   Male          1989
13   24   Carmelo Anthony Basketball  $29,400,000     $21,400,000   $8,000,000      United States   Male          1984
14   37       CC Sabathia   Baseball  $24,200,000     $23,000,000   $1,200,000      United States   Male          1980
15   37        Chris Paul Basketball  $24,200,000     $18,700,000   $5,500,000      United States   Male          1985
16   57        Chris Bosh Basketball  $21,800,000     $19,300,000   $2,500,000      United States   Male          1984
17   30         Cliff Lee   Baseball  $25,300,000     $25,100,000     $200,000      United States   Male          1978
18   70       Cole Hamels   Baseball  $20,700,000     $20,500,000     $200,000      United States   Male          1983
19   40    Darrelle Revis   Football  $23,800,000     $23,000,000     $800,000      United States   Male          1985
20   80       David Ortiz   Baseball  $19,800,000     $14,800,000   $5,000,000 Dominican Republic   Male          1975
21   35       Derek Jeter   Baseball  $24,300,000     $15,300,000   $9,000,000      United States   Male          1974
22   79    Deron Williams Basketball  $20,000,000     $18,500,000   $1,500,000      United States   Male          1984
23   13      Derrick Rose Basketball  $36,600,000     $17,600,000  $19,000,000      United States   Male          1988
24   45     Dirk Nowitzki Basketball  $23,200,000     $22,700,000     $500,000            Germany   Male          1978
25   33      Zack Greinke   Baseball  $24,450,000     $24,400,000      $50,000      United States   Male          1983
26   66        Drew Brees   Football  $21,000,000     $10,000,000  $11,000,000      United States   Male          1979
27   29     Dwight Howard Basketball  $25,500,000     $20,500,000   $5,000,000      United States   Male          1985
28   23       Dwyane Wade Basketball  $29,900,000     $18,900,000  $11,000,000      United States   Male          1982
29    6       Tiger Woods       Golf  $61,200,000      $6,200,000  $55,000,000      United States   Male          1975
30   66       Eli Manning   Football  $21,000,000     $13,500,000   $7,500,000      United States   Male          1981
31   11    Manny Pacquiao     Boxing  $41,800,000     $41,000,000     $800,000        Philippines   Male          1978
32   77   Felix Hernandez   Baseball  $20,300,000     $20,100,000     $200,000          Venezuela   Male          1986
33   21   Fernando Alonso     Racing  $31,000,000     $29,000,000   $2,000,000              Spain   Male          1981
34   63   Fernando Torres     Soccer  $21,300,000     $17,800,000   $3,500,000              Spain   Male          1984
35    1  Floyd Mayweather     Boxing $105,000,000    $105,000,000           $0      United States   Male          1977
36   92    Franck Ribéry     Soccer  $18,300,000     $16,800,000   $1,500,000             France   Male          1983
37   14       Gareth Bale     Soccer  $36,400,000     $25,400,000  $11,000,000              Wales   Male          1989
38   53       Geno Atkins   Football  $22,350,000     $22,300,000      $50,000      United States   Male          1988
39   59       Yaya Touré     Soccer  $21,700,000     $19,200,000   $2,500,000        Ivory Coast   Male          1983
40   64    Henrik Stenson       Golf  $21,200,000     $18,000,000   $3,200,000             Sweden   Male          1976
41   94       Jairus Byrd   Football  $18,000,000     $17,900,000     $100,000      United States   Male          1986
42   70      Jason Peters   Football  $20,750,000     $20,700,000      $50,000      United States   Male          1982
43   97      Jayson Werth   Baseball  $17,500,000     $17,300,000     $200,000      United States   Male          1979
44   86       Jeff Gordon     Racing  $18,700,000     $13,700,000   $5,000,000      United States   Male          1971
45   42    Jimmie Johnson     Racing  $23,500,000     $17,000,000   $6,500,000      United States   Male          1975
46   52       Joe Johnson Basketball  $22,500,000     $21,500,000   $1,000,000      United States   Male          1981
47   48     Johan Santana   Baseball  $22,900,000     $22,500,000     $400,000          Venezuela   Male          1979
48   18  Matthew Stafford   Football  $33,000,000     $31,500,000   $1,500,000      United States   Male          1988
49   77     Albert Pujols   Baseball  $20,300,000     $18,300,000   $2,000,000 Dominican Republic   Male          1980
50   32    Miguel Cabrera   Baseball  $24,600,000     $22,600,000   $2,000,000          Venezuela   Male          1983
51   31         Joe Mauer   Baseball  $24,800,000     $23,000,000   $1,800,000      United States   Male          1983
52   62         Joe Haden   Football  $21,350,000     $21,200,000     $150,000      United States   Male          1989
53   69    Julius Peppers   Football  $20,800,000     $20,400,000     $400,000      United States   Male          1980
54   70  Justin Verlander   Baseball  $20,700,000     $20,200,000     $500,000      United States   Male          1983
55   20      Kevin Durant Basketball  $31,900,000     $17,900,000  $14,000,000      United States   Male          1988
56    5       Kobe Bryant Basketball  $61,500,000     $30,500,000  $31,000,000      United States   Male          1978
57   89  Larry Fitzgerald   Football  $18,500,000     $17,000,000   $1,500,000      United States   Male          1983
58    3      LeBron James Basketball  $72,300,000     $19,300,000  $53,000,000      United States   Male          1984
59   19    Lewis Hamilton     Racing  $32,000,000     $29,000,000   $3,000,000            England   Male          1985
60   41             Li Na     Tennis  $23,600,000      $5,600,000  $18,000,000              China Female          1982
61    4      Lionel Messi     Soccer  $64,700,000     $41,700,000  $23,000,000          Argentina   Male          1987
62  100      Luis Suárez     Soccer  $17,300,000     $13,300,000   $4,000,000            Uruguay   Male          1987

如您所见,y 轴看起来很糟糕,请告诉我如何在下一个位置之间留出空间以使其看起来更清晰

PS。知道为什么它说 1 亿美元是最低价值吗?它显然应该位于 y 轴的顶部,但它仍位于底部。

标签: rggplot2

解决方案


根据@RonakShah 和@TobiO 提供的评论,看起来您的całkowiteZarobki变量被读取为字符而不是数字(可能是因为 $ 符号和逗号)。要仅提取数字并将它们转换为数字,您可以使用以下代码:

as.numeric(unlist(lapply(stringr::str_extract_all(dane$całkowiteZarobki,"[0-9]+"),
          function(entry) paste0(entry,collapse=""))))

之后,您可以使用您制作的 ggplot 代码并添加以下代码以将 y 轴格式化为带逗号的美元。

scale_y_continuous(labels = scales::dollar)

推荐阅读