- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,在发布此问题之前,我们已经为以下问题苦苦挣扎了很多很多小时。
我们有大量类似于以下的数据集:
Income Inhabitants Percent
Below 15000 Below 5000 4.664723
15000 - 3.000 Below 5000 15.743440
30000 - 40000 Below 5000 13.994169
40000 - 50000 Below 5000 12.609329
50000 - 60000 Below 5000 11.333819
60000 - 70000 Below 5000 11.370262
70000 - 100000 Below 5000 14.795918
Above 100000 Below 5000 5.211370
Do not know Below 5000 10.276968
Below 15000 5000-20000 4.225146
15000 - 3.000 5000-20000 13.157895
30000 - 40000 5000-20000 12.733918
40000 - 50000 5000-20000 11.739766
60000 - 70000 5000-20000 11.315789
70000 - 100000 5000-20000 18.728070
Above 100000 5000-20000 7.880117
Do not know 5000-20000 9.356725
Below 15000 20000-110000 4.013588
15000 - 3.000 20000-110000 11.147458
30000 - 40000 20000-110000 11.927529
40000 - 50000 20000-110000 11.751384
50000 - 60000 20000-110000 9.738299
60000 - 70000 20000-110000 10.367388
70000 - 100000 20000-110000 17.929039
Above 100000 Above 110000 13.198289
Do not know Above 110000 9.927026
Below 15000 Above 110000 4.662941
15000 - 3.000 Above 110000 10.286413
30000 - 40000 Above 110000 11.054838
40000 - 50000 Above 110000 10.513447
50000 - 60000 Above 110000 9.081383
60000 - 70000 Above 110000 8.539993
70000 - 100000 Above 110000 18.389801
Above 100000 Above 110000 18.040517
Do not know Above 110000 9.430667`
我们想制作数据的堆积条,显示区域之间的分布。
这样做了:
dg=ggplot(data=frame, aes(x=Inhabitants, ymax=100, y=Percent,fill=eval(parse(text=special))))
g=g+geom_bar(stat="identity")
g=g+theme_minimal()
g=g+xlab("") + ylab("")
g=g+theme(axis.text.y=element_blank(),axis.ticks.y=element_blank(),axis.ticks.x=element_blank())
g=g+scale_fill_discrete("",guide = guide_legend(reverse=TRUE))
g
很好,我们得到了我们想要的。我们只是想补充一些信息:每个部分代表多少百分比?
通过以下代码我们很接近:
g=g+geom_text(aes(label = paste(round(Percent,digits=1),"%"),y=Percent),size = 2,hjust = 0.4, vjust = 1.4, position ="stack")
得到这个:http://s28.postimg.org/lv3zg2cnh/bars2.png
我们只想将数字放在各部分的中间。然而,事实证明这(对我们来说)很难做到!
我们尝试过如下代码,但没有成功。
data=transform(frame,pos=round(ave(Percent,Inhabitants,FUN=cumsum)-Percent/2))
g=ggplot(data, aes(x=Inhabitants, ymax=100, y=Percent, fill=eval(parse(text=special))))
g=g+geom_bar(stat="identity")
g=g+theme_minimal()
g=g+xlab("") + ylab("")
g=g+theme(axis.text.y=element_blank(),axis.ticks.y=element_blank(),axis.ticks.x=element_blank())
g=g+scale_fill_discrete("",guide = guide_legend(reverse=TRUE))
g=g+geom_text(aes(label = paste(round(Percent,digits=1),"%"),y=pos),size = 3,hjust = 0.4, vjust = 0, position ="stack")
g
我们已经检查了 SO 的解决方案。不幸的是,由于我们对 R 缺乏经验。经过许多小时后,我们现在放弃并且对我们的第一个解决方案感到满意,如果不是因为当我们处理具有更多部分的数据集时,它通常会变成一个困惑:http://s13.postimg.org/5jxavvohz/bars3.png
我们的主要问题是:
1) 我们如何防止出现值小于 2% 的标签。
(我们的第二个问题是:我们怎样才能得到位于中间的值?)
最佳答案
避免在 Percent
时标记堆栈小于某个值,您可以将定位变量分配给 NA
对于那些情况。
例如,您可以通过 ifelse
执行此操作和 transform
创建 pos
之后通过 cumsum
变量正如您在问题中所做的那样。我在这个例子中使用 5 作为截止值,因为没有 Percent
在您的示例数据中小于 2。
data = transform(data, pos2 = ifelse(Percent < 5, NA, pos))
现在只需使用 pos2
作为你的美学 geom_text
当 Percent
时,您将没有文本标签小于 5。删除 position = "stack"
来自 geom_text
使您的标签居中。
这是您的示例数据集的样子(使用 fill = Income
因为我不确定 fill = eval(parse(text = special))
在做什么)。
ggplot(data, aes(x = Inhabitants, y = Percent, fill = Income)) +
geom_bar(stat="identity") +
theme_minimal() +
xlab("") + ylab("") +
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.ticks.x = element_blank()) +
scale_fill_discrete("",guide = guide_legend(reverse = TRUE)) +
geom_text(aes(label = paste(round(Percent, digits = 1),"%"), y = pos2), size = 3)
正如@epi10 所指出的,另一种选择是每次都使用空白标签 Percent
小于你的切断。您可以通过使用原始位置变量并使用 ifelse
来完成此操作geom_text
内部.那一行看起来像:
geom_text(aes(label = ifelse(Percent < 5, "", paste(round(Percent, digits = 1),"%")), y = pos), size = 3)
关于R-ggplot : Selection of which labels to appear in bar stack and their position,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916298/
在 的 React 组件中菜单,我需要设置selected反射(reflect)应用程序状态的选项的属性。 在 render() , optionState从状态所有者传递给 SortMenu 组件
我是初级 Ruby-mysql 程序员,我想知道如何使我的(存储过程)查询结果更快.. 这是我的存储过程我正在使用 SQL_CACHE.. 但我不确定.. 缓存使我的过程更快.. : ( DROP
我一直在 Python 中进行套接字编程,以使用 select.select(rfile, wfile, xlist[, timeout]) 处理由已连接的客户端套接字列表发出的请求,并且我还想用 J
我试图通过用空格填充文本来创建下拉列表中的列效果,如下例所示: [Aux1+1] [*] [Aux1+1] [@Tn=PP] [Main] [*] [Main A
我为 MySQL 编写了以下查询: SELECT subquery.t1_column1, subquery.t2_id, MAX(subquery.val) FROM ( S
为什么我们要用 select 标签来编写.attr('selected','selected') 例如: $('#countryList option').filter(function () {
Lokalizacja: Gdańsk Rzeszów Wrocław 不知道发生了什么,但在那种情况下没有选择的选项,我必须从列表中选择一些东西。当我从选
我的表单中有两个选择字段。第一个是单选,另一个是多选。现在我想做的是根据单选中所选的选项,使用给定的数据选择多选中的选项。为此,我在单选更改时触发 ajax 请求: $.ajax({ type
我在 Firefox 5 中发现了一个奇怪的错误(我现在无法访问 4)。但是,我认为它可能在 Firefox 4 中工作,因为我刚买了一台新电脑,而且我不记得以前见过这个错误。 我有几个选择框。所选值
此 SQL 有何不同: 第一个: select * from table_1 a join table_2 b on a.id = b.acc_id 第二个: select * f
预选 的最佳做法是什么?在 ? 根据不同的网站,两者都有效。但是哪个更好呢?最兼容? Foo Bar 最佳答案 如果您正在编写 XHTML,则 selected="selected" 是必需的。 如
我使用 Angular JS 创建了一个多选选择框:下面是相同的代码: JS: $scope.foobars = [{ 'foobar_id': 'foobar01', 'name':
我在 jqGrid 中有几列 edittype="select"。如何读取特定行中当前选定值的选项值? 例如:当我提供以下选项时,如何获得 FedEx 等的“FE” editoption: { val
这是我更大问题的精简查询,但要点是我试图内部联接到一个选择,其中选择受到外部选择的限制。那可能吗?我在内部选择上收到有关多部分标识符 S.Item 和 S.SerialNum 的错误。 要点是这样的,
如果chat.chat_type IS NULL,我想选择user.*,但如果chat.chat_type = 1 我想选择组。* SELECT CASE WHEN ch
我正在编写一个小脚本来测试表单在提交之前是否已被更改。所以我可以使用普通输入(文本、文本区域等): if(element.defaultValue != element.value) { al
我正在尝试为 Prototype 编写一个插件,用户在其中单击下拉菜单并将其替换为多选元素。我快完成了。在用户选择他们想要显示的内容并将表单提交到同一页面之前,一切都很好。我正在使用 PHP 来使用
你如何在 MongoDB 中进行嵌套选择,类似于 SELECT id FROM table1 WHERE id IN (SELECT id FROM table2) 最佳答案 MongoDB 尚不具备
我有以下用于选择下拉列表的代码: {{unit.Text}} UnitOfMeasurements 数组中的每一项看起来像这样: Selected: false Text: "lb" Va
我正在尝试使用[选定]和[ngValue]来设置表单中包含对象的选择标记的默认值。但出于某种原因,它们似乎无法相提并论。。示例代码:。这段代码最终只显示空白作为缺省值。如果删除[ngValue],它就
我是一名优秀的程序员,十分优秀!