首页 > 解决方案 > 缩放 X 轴错误并需要帮助在 ggplot R 中将“%”符号添加到 X 轴

问题描述

我试图将 X 轴从 3 缩放到 5 0.5,但是每当我尝试使用 scale_x_continuous 或离散时,我都会收到此错误“‘x’的比例已经存在。为‘x’添加另一个比例,它将替换现有的规模”。X轴根本没有变化。

我究竟做错了什么?我发现的所有示例都只是建议使用 scale_x_continuous/discrete 来更改缩放比例,找不到任何替代方法。

另外,如何将“%”符号添加到 X 轴的值中?提前非常感谢!

这是我的代码:

ggplot() +
  ggtitle("Crime rate and unemployment rate relationship \nin regions with lower unemployment rate") +
  geom_point(aes(x = Unemployment.rate, y= Crime_occurrences, colour = Crime),
             size = 2, data = df) +
  xlab("Unemployment Rate (%)") +
  ylab("Crime Occurrences") +
  new_scale_color()+
  labs(linetype = "Crime") +
  scale_x_continuous(breaks = seq(from = 3, to = 5, by = 0.5))

如果需要,这是 dput:

structure(list(Date = structure(c(17897, 17897, 17897, 17928, 
17928, 17928, 17956, 17956, 17956, 17987, 17987, 17987, 18017, 
18017, 18017, 18048, 18048, 18048, 18078, 18078, 18078, 18109, 
18109, 18109, 18140, 18140, 18140, 18170, 18170, 18170, 18201, 
18201, 18201, 18231, 18231, 18231, 18262, 18262, 18262, 18293, 
18293, 18293, 18322, 18322, 18322, 18353, 18353, 18353, 18383, 
18383, 18383, 18414, 18414, 18414, 18444, 18444, 18444, 18475, 
18475, 18475, 18506, 18506, 18506, 18536, 18536, 18536), class = "Date"), 
    Crime = c("Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences", 
    "Anti-social behaviour", "Theft", "Violence and sexual offences"
    ), Crime_occurrences = c(46048L, 59095L, 60903L, 46421L, 
    55113L, 57402L, 53790L, 61596L, 66028L, 58546L, 59191L, 63211L, 
    60366L, 60219L, 65880L, 60129L, 57945L, 66560L, 60293L, 50947L, 
    61021L, 55633L, 50135L, 57478L, 48649L, 48699L, 55966L, 49221L, 
    50774L, 59692L, 42594L, 48351L, 56188L, 38697L, 44196L, 56252L, 
    40911L, 47788L, 58490L, 39094L, 46059L, 55306L, 47758L, 39437L, 
    55195L, 71823L, 26419L, 47693L, 76630L, 28944L, 54598L, 74699L, 
    32291L, 58689L, 66761L, 37074L, 66098L, 68462L, 37713L, 65852L, 
    56563L, 37036L, 60341L, 57994L, 38726L, 58046L), Unemployment.rate = c(3.21299304812096, 
    3.21299304812096, 3.21299304812096, 3.21407730295749, 3.21407730295749, 
    3.21407730295749, 3.07244008464232, 3.07244008464232, 3.07244008464232, 
    3.08493181969057, 3.08493181969057, 3.08493181969057, 3.10614218230136, 
    3.10614218230136, 3.10614218230136, 3.22312556301873, 3.22312556301873, 
    3.22312556301873, 3.12755904901825, 3.12755904901825, 3.12755904901825, 
    3.23579986150285, 3.23579986150285, 3.23579986150285, 3.26468227547793, 
    3.26468227547793, 3.26468227547793, 3.21917119228965, 3.21917119228965, 
    3.21917119228965, 3.39151937106994, 3.39151937106994, 3.39151937106994, 
    3.36709422886676, 3.36709422886676, 3.36709422886676, 3.50615666377231, 
    3.50615666377231, 3.50615666377231, 3.49109767843293, 3.49109767843293, 
    3.49109767843293, 3.4101096182824, 3.4101096182824, 3.4101096182824, 
    3.44083160566247, 3.44083160566247, 3.44083160566247, 3.45075851478447, 
    3.45075851478447, 3.45075851478447, 3.5319782798045, 3.5319782798045, 
    3.5319782798045, 3.63445450113824, 3.63445450113824, 3.63445450113824, 
    4.14712651558611, 4.14712651558611, 4.14712651558611, 4.25985044273646, 
    4.25985044273646, 4.25985044273646, 4.40411017203591, 4.40411017203591, 
    4.40411017203591)), row.names = c(NA, -66L), class = "data.frame")

谢谢!

标签: rggplot2scaling

解决方案


尝试这个:

library(ggplot2)
library(ggnewscale)
#Code
ggplot() +
  ggtitle("Crime rate and unemployment rate relationship \nin regions with lower unemployment rate") +
  geom_point(aes(x = Unemployment.rate, y= Crime_occurrences, colour = Crime),
             size = 2, data = df) +
  scale_x_continuous(breaks = seq(from = 3, to = 5, by = 0.5),
                     limits = c(3,5),
                     labels = function(x) paste0(x,'%'))+
  xlab("Unemployment Rate (%)") +
  ylab("Crime Occurrences") +
  new_scale_color()+
  labs(linetype = "Crime")

输出:

在此处输入图像描述

一个更花哨的选择(非常感谢@teunbrand):

#Code2
ggplot() +
  ggtitle("Crime rate and unemployment rate relationship \nin regions with lower unemployment rate") +
  geom_point(aes(x = Unemployment.rate, y= Crime_occurrences, colour = Crime),
             size = 2, data = df) +
  scale_x_continuous(breaks = seq(from = 3, to = 5, by = 0.5),
                     limits = c(3,5),
                     labels = scales::percent_format(scale = 1, accuracy = 0.1))+
  xlab("Unemployment Rate (%)") +
  ylab("Crime Occurrences") +
  new_scale_color()+
  labs(linetype = "Crime")

输出:

在此处输入图像描述


推荐阅读