【问题标题】:ggplot shows all Y-axis values instead of calibratingggplot 显示所有 Y 轴值而不是校准
【发布时间】:2018-04-25 00:13:56
【问题描述】:

我使用并排栏为几个变量绘制了一个 ggplot,但似乎 y 轴显示时没有任何校准 - 显示每个数字(以 % 为单位)

该图的主题是显示美国每个州的白人、西班牙裔和黑人在总人口中所占的比例 (%)。如您所见,应该代表百分比的 Y 轴看起来像是所有值都被推入其中,而不是从 0 到 100 的校准

我正在使用的数据集在github_fivethirtyeight_police-killings 提供(很抱歉,我无法找到一种方法来组织我从数据框中获取的五列:州、种族和您看到的三个共享右边(%)

R代码呈现:
x<-read.csv("C:/Users/USER/data/police-killings/police_killings.csv",header=TRUE, sep = "," ,stringsAsFactors = FALSE) state<-x[,10] ethnicity<-x[,4] state_and_shares<-x[,c(10,23:25)]

df2<-melt(state_and_shares, id.vars = 'state') head(df2)

ggplot(df2,aes(x=state,y=value,fill=variable))+geom_bar(stat = 'identity',position = 'dodge')+theme(axis.text.x = element_text(angle = 90, hjust = 1))

谁能告诉我如何考虑 Y 值以使其看起来更正常并且不显示所有值?

【问题讨论】:

  • 这可能是因为您的value 列不是数字。在运行 ggplot 之前尝试运行 df2$value &lt;- as.numeric(df2$value)。如果您使用 dput 共享实际数据的子集,这也将更容易回答。
  • 由于 melt 将值和变量强制转换为因子,因此该图显示的 y 值非常大(以千计)。我尝试将它强制转换为数字之前的字符,但仍然以某种方式混合了这些值,所以我得到如下信息:在某个国家/地区有 99% 的西班牙裔、95% 的白人、90% 的黑人,加起来不等于 100%

标签: r dataframe plot ggplot2


【解决方案1】:

您需要 ggplot 才能将 y 值视为数字而不是字符串,例如。用 as.numeric():

ggplot(df2,aes(x=state,y=as.numeric(value),fill=variable))+geom_bar(stat = 'identity',position = 'dodge')+theme(axis.text.x = element_text(angle = 90, hjust = 1))

【讨论】:

  • 我今天正在向所有我能帮助我的人寻求帮助,但我发现了问题,抱歉耽搁了。问题是,数据集部分基于在人口普查区进行的调查,而 share_white 等基于此,这意味着如果在一个州但在不同的人口普查区有 10 起杀戮,share_white 等将显示人口这些特定群体相对于该州的每个人口普查区块,很明显为什么将一个国家的份额加起来远高于 100%。感谢您的回答!顺便说一句, as.numeric(as.string(df)) 起作用了
  • 很高兴它有帮助。编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多