更多与统计数据的呈现有关的美学问题,假设您有两组数据,
速度重量 一个 2.2 500 b 4.7 222 c 7.3 999 d 3.1 1000
因此,如果您在同一个条形图上绘制速度和权重,您将得到所有速度值的软乎乎的小条(使它们不可读)。但是,应该一起查看数据,因为您要显示的速度和体重之间存在某种关系。
我想出的是相邻的条形图:
但它看起来有点多余,那里有重复的轴。
更多与统计数据的呈现有关的美学问题,假设您有两组数据,
速度重量 一个 2.2 500 b 4.7 222 c 7.3 999 d 3.1 1000
因此,如果您在同一个条形图上绘制速度和权重,您将得到所有速度值的软乎乎的小条(使它们不可读)。但是,应该一起查看数据,因为您要显示的速度和体重之间存在某种关系。
我想出的是相邻的条形图:
但它看起来有点多余,那里有重复的轴。
让两个图表共享一个轴是可以的。
但最好避免一张图在同一维度上有两个尺度。误读的可能性太大(主要是假设对齐具有一定的意义)。请参阅 Stephen Few 的文章图形中的双比例轴:它们曾经是最好的解决方案吗?.
您还可以使用 z 变换(或您认为更合适的任何其他方式)将绝对比例转换为相对比例。
speed = c(2.2, 4.7, 7.3, 3.1)
weight = c(500, 222, 999, 1000)
speed=scale(speed)
weight=scale(weight)
rng=extendrange(range(c(speed,weight)))
plot(speed, type="b", col="red", ylim=rng,ylab="z-values",xlab="",xaxt="n",bty="n")
points(weight, type="b",col="blue")
legend("topleft",legend=c("speed","weight"),col=c("red","blue"),lty=1, bty="n",pch=1)
axis(1, at=lbls, labels=lbls)
这种方法的一个很好的特点是它可以在两个以上的尺度上使用。尽管它没有提供关于单个点值的信息,但它使尺度更具可比性。
一般来说,如果您对一组观察结果中的每一个都有两个不同的测量值,并且您认为它们之间可能存在关系,我认为最好用散点图将它们可视化。我不知道你是否使用R
,但这里有一些简单的代码和示例图:
speed = c(2.2, 4.7, 7.3, 3.1)
weight = c(500, 222, 999, 1000)
windows()
plot(speed, weight)
这个情节看起来不是很精彩,主要是因为你只有 4 个数据点。
另一种可视化数据的方法是使用dotplot。这是查看表示简单量级的数据的一种特别好的方法,如果您只查看一个变量,这就是您所拥有的。请注意,这与条形图提供的内容相同,只是已显示点图更容易让人们提取信息。问题是,您能否同时查看两个变量,以便您可以看到关系,但没有冗余?
处理这个一般问题的一种方法是在同一个图上绘制两个变量(在这种情况下,同一个点图)。这类事情在经济学中的时间序列数据中很常见(这是我通过谷歌搜索找到的)。诀窍是找到一种方法在同一个地块上获得两个不同的比例。这可以通过根据另一个变量重新调整其中一个变量来完成;此外,您必须将另一个变量的轴值重新调整为第一个变量的项。这些“重新缩放”必须是线性变换,以免以有意义的方式更改数据。以下是一些R
以令人难以置信的方式完成此操作的代码,但我希望它们很容易理解:
sM = mean(speed); wM = mean(weight)
sSD = sd(speed); wSD = sd(weight)
weightZ = (weight-wM) / wSD
convertedW = (weightZ*sSD) + sM
sTicks = c(0:8)
sTicksZ = (sTicks-sM) / sSD
convertedST = (sTicksZ*wSD) + wM
convertedST = round(convertedST)
sY = seq(from=1.1, to=4.1, by=1)
wY = seq(from=0.9, to=3.9, by=1)
windows()
plot(speed, sY, pch=1, col="red", axes=F, xlab="", ylab="", ylim=c(0.5, 4.5), xlim=c(0,8))
points(convertedW, wY, pch=2, col="blue")
abline(h=c(1:4), lty="dashed", col="lightgray")
box()
axis(side=2, at=c(1:4), labels=c("a","b","c","d"))
axis(side=3, at=sTicks, col="red")
axis(side=1, at=sTicks, labels=convertedST, col="blue")
mtext("Speed", side=3, line=2.5, cex=1.5, col="red")
mtext("Weight", side=1, line=2.5, cex=1.5, col="blue")
legend("bottomright", legend=c("Speed", "Weight"), pch=c(1,2), col=c("red","blue"))
正如您在此处所拥有的,使用较少的数据,这可能会提供更多信息。
鉴于您的数据集在数量级上有所不同,您可能希望对 x 轴使用对数刻度(或在绘图之前获取所有样本的对数。)这样您仍然可以看到相同数量级内的变化相对清晰,而组之间的空白空间被压缩。
示例R
:
speed = c(2.2, 4.7, 7.3, 3.1)
weight = c(500, 222, 999, 1000)
barplot(rbind(speed, weight), log='x', beside=T, horiz=T,
legend.text=T, args.legend=list(x='right'))