- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 ggplot 进行缩放时遇到了一个有趣的问题。我有一个数据集,我可以使用默认的线性比例很好地绘制图表,但是当我使用scale_y_log10()时,数字会相差很大。这是一些示例代码和两张图片。请注意,线性比例的最大值约为 700,而对数比例的结果为 10^8。我向您展示整个数据集只有约 8000 个条目长,所以有些事情是不对的。
我想这个问题与我的数据集的结构和分箱有关,因为我无法在“钻石”等常见数据集上复制此错误。但是我不确定排除故障的最佳方法。
谢谢,扎克cp
<小时/>编辑:bdamarest 可以在钻石数据集上重现比例问题,如下所示:
example_1 = ggplot(diamonds, aes(x=clarity, fill=cut)) +
geom_bar() + scale_y_log10(); print(example_1)
<小时/>
#data.melt is the name of my dataset
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar()
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
这是一些示例数据......我想我看到了问题。原始融化数据集可能有约 10^8 行长。也许行号用于统计?
> head(data.melt)
Library name group
221938 AB Arthrofactin glycopeptide
235087 AB Putisolvin cyclic peptide
235090 AB Putisolvin cyclic peptide
222125 AB Arthrofactin glycopeptide
311468 AB Triostin cyclic depsipeptide
92249 AB CDA lipopeptide
test2 <- data.frame(
Library = rep("AB", 6L),
name = c(
"Arthrofactin", "Putisolvin", "Putisolvin", "Arthrofactin",
"Triostin", "CDA"
),
group = c(
"glycopeptide", "cyclic peptide", "cyclic peptide", "glycopeptide",
"cyclic depsipeptide", "lipopeptide"
),
row.names = c(221938L, 235087L, 235090L, 222125L, 311468L, 92249L)
)
<小时/>
更新:
行号不是问题。以下是使用相同的 aes x 轴和填充颜色绘制的相同数据,并且缩放比例完全正确:
> ggplot(data.melt, aes(name, fill= name)) + geom_bar()
> ggplot(data.melt, aes(name, fill= name)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
最佳答案
geom_bar
和 scale_y_log10
(或任何对数刻度)不能很好地协同工作,并且不会给出预期的结果。
第一个基本问题是条形变为 0,并且在对数标度上,0 会转换为负无穷大(这很难绘制)。围绕此的婴儿床通常从 1 而不是 0 开始(因为 $\log(1)=0$),如果计数为 0,则不绘制任何内容,并且不用担心失真,因为如果需要对数刻度,您可能不需要不在乎相差 1(不一定正确,但是......)
我正在使用@dbemarest 展示的diamonds
示例。
这样做通常是变换坐标,而不是比例(稍后将详细介绍差异)。
ggplot(diamonds, aes(x=clarity, fill=cut)) +
geom_bar() +
coord_trans(ytrans="log10")
但这会产生错误
Error in if (length(from) == 1 || abs(from[1] - from[2]) < 1e-06) return(mean(to)) :
missing value where TRUE/FALSE needed
这是由负无穷问题引起的。
当您使用尺度变换时,变换将应用于数据,然后进行统计和排列,然后在逆变换中(粗略地)标记尺度。您可以通过自己进行计算来了解发生了什么。
DF <- ddply(diamonds, .(clarity, cut), summarise, n=length(clarity))
DF$log10n <- log10(DF$n)
这给出了
> head(DF)
clarity cut n log10n
1 I1 Fair 210 2.322219
2 I1 Good 96 1.982271
3 I1 Very Good 84 1.924279
4 I1 Premium 205 2.311754
5 I1 Ideal 146 2.164353
6 SI2 Fair 466 2.668386
如果我们以正常方式绘制它,我们会得到预期的条形图:
ggplot(DF, aes(x=clarity, y=n, fill=cut)) +
geom_bar(stat="identity")
缩放 y 轴会产生与使用未预先汇总的数据相同的问题。
ggplot(DF, aes(x=clarity, y=n, fill=cut)) +
geom_bar(stat="identity") +
scale_y_log10()
我们可以通过绘制计数的 log10()
值来了解问题是如何发生的。
ggplot(DF, aes(x=clarity, y=log10n, fill=cut)) +
geom_bar(stat="identity")
这看起来就像带有 scale_y_log10
的标签,但标签是 0, 5, 10, ... 而不是 10^0, 10^5, 10^10, ...
因此,使用 scale_y_log10
进行计数,将其转换为对数,堆叠这些对数,然后以反对数形式显示比例。然而,堆叠日志不是线性转换,因此您要求它执行的操作没有任何意义。
最重要的是,对数刻度上的堆叠条形图没有多大意义,因为它们不能从 0 开始(条形底部应该在的位置),并且比较条形的各个部分是不合理的,因为它们的大小取决于它们在堆栈中的位置。考虑类似:
ggplot(diamonds, aes(x=clarity, y=..count.., colour=cut)) +
geom_point(stat="bin") +
scale_y_log10()
或者,如果您确实想要堆叠条形通常会给您带来的组总数,您可以执行以下操作:
ggplot(diamonds, aes(x=clarity, y=..count..)) +
geom_point(aes(colour=cut), stat="bin") +
geom_point(stat="bin", colour="black") +
scale_y_log10()
关于r - 带对数刻度的条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502003/
如何使用 plot() 在 XY 图中绘制第二条线,以不同的比例(如本例(紫色线))? 第一行(红色)我的 R 代码是这样的: p <- sqlQuery(ch,"SELECT wl,param1 F
我正在寻找一种将折线图步骤设置为仅完整数字步骤的方法,例如 1,2,3,4,5..... 目前它看起来像这样: 这些是我的选择。我搜索了很多但找不到解决方案。 let options = {
我的问题是如何将 Y 轴刻度的间隔从 0.2 更改为 0.1?我已经尝试了一切,但我很困!帖子底部堆叠条形图的图片 dpi=600 #pixels per square inch A <- c(
有没有办法根据当前数据集在 D3 轴上动态设置 ticks。我遇到的问题是我的时间范围(x 轴)可能变化很大。对于一些数据集来说,它是几年的值(value),对于其他数据集来说是几个月,在某些情况下只
我已经使用默认参数创建了一个 dojo 蜘蛛图。我需要隐藏轴标签(刻度上的数据值,而不是轴标题)。 我已经尝试过'ticks: false',但是它不适用于蜘蛛图。 require(["dojo/_b
有没有一种简单的方法可以在绘图 Axis 上获得自定义缩放比例? 例如,semilogy 函数提供 {x, log10(y)} 缩放比例,这样就可以自动放大/缩小并自动调整刻度和标签。我想对 {x,
如何修改图形和图表的 y Axis 刻度?我想要这样的东西:my_figure.y_range.end = my_figure.y_range.end * 1.3 所以我想要更高一点的y轴。谢谢! 最
我正在尝试使用 recharts 添加图表一些货币的最新汇率。数据显示正确,但图表始终从 0 开始并略高于最大值。 图表是正确的,但它不需要从 0 开始,因为这样做,它几乎是一条线。 这是图表的图片:
我有一个 SWT Scale 小部件,我需要在刻度上的刻度上添加标签。 有没有办法做到这一点?也许在 slider 小部件上? 谢谢 最佳答案 这可能不是您所要求的,但您可以在 Scale 小部件旁边
这是一个从 .xlsx 文件中读取数据并利用 Plotly 库绘制气泡图的程序。这是 .xlsx 文件的原始数据: 1991 1992 1993 1994 1995
我这里有一个代码笔 - https://codepen.io/anon/pen/yvgJKB 我有一个简单的堆积条形图。 我想将其制作成一个组件,因此我需要传入值以使其可重用 x 缩放函数返回d.da
让我们看一个基本的演示折线图: jsfiddle $(function () { $('#container').highcharts({ //all the code there 我想强制
是否可以在 t-sql 中获得像 DateTime.Ticks 这样的 C# 内容? 感谢帮助 最佳答案 您不太可能从 SQL 中获得与 DateTime.Ticks 相同的精度,因为 SQL 不能以
我正在使用 Bokeh 生成散点图,每个 X 值具有不同的 Y 值。当 Bokeh 生成绘图时,它会根据绘制的值的数量自动填充 x 轴间距。我希望 x 轴上的所有值均匀分布,无论单个数据点的数量如何。
我使用下面的代码使用谷歌图表生成折线图 google.charts.load('current', {packages: ['corechart', 'line']});
我正在尝试在 d3 中构建堆积条形图。 这是我的 jsfiddle: http://jsfiddle.net/maneesha/gwjkgruk/4/ 我正在尝试修复它,使 y 轴从零开始。 我认为这
我有一个 d3 时间刻度图表。目前,轴刻度为每个数据对象呈现一个日期。例如,数据的范围可以是 1 天的数据、1 个月内 2 周的数据、5 个月的数据甚至更多。 理想情况下,我们希望显示带有周数的刻度,
当使用“Cassic”折线图时,我可以为 hAxis 分配刻度,还有这样的格式和标题: var options = { hAxis: { format:'h a', title
我的累积折线图没有正确构建 yScale。 给定要构建图表的数据: var data = [{ key: "Page view", values: [ ["2013-07-01 00:
在 y 轴上使用两个具有正常整数值的 DateAxisSeries(x 轴)我的 jqPlot 将 y 刻度呈现两次。 像这样: 2| 2| 1| 1| 0|_____________________
我是一名优秀的程序员,十分优秀!