动态气泡图

原文地址:动态气泡图 作者:数据化分析

(文/@数据化分析

 

泡图是一个将点表示为气泡(或圆圈)的散点图,与XY散点图类似,但可表现的数据信息量更多,最多可以表示五维(x 位置、 y 位置、大小、颜色和时间),通过更改气泡的大小和颜色,按时间变化将气泡制成动画视觉效果,能使数据探索更加方便。

在网站http://www.gapminder.org上可以发现大量动态气泡图的应用,还能自己动手操作和调节,请看下面的使用帮助:

 怎么样?赶紧去体验一下吧!用过之后可能会想:能不能下载个软件自己动手做出这个动画?其实它是由一个叫Trendalyzer的软件做出来的,2007年3月,Google收购了Trendalyzer软件,暂没有发现该软件的下载地址,所以要想做出完全一样的效果恐怕很难,但可以试试Google免费的 Motion Chart Gadget  Public Data Explorer,这里有个示例:World Development Indicators and Global Development Finance

SAS公司的JMP软件也可以做出类似的效果,下面看一个示例的实现过程,参考软件帮助手册“发现 JMP”,使用软件自带的年龄组.jmp 数据表,表中包含 116 个国家或地区从 1950 年到 2004 年的人口统计数据。总人口数按年龄组划分,不是每个国家每年都有数据。

社会学家想探究下列问题:世界上人口的年龄在变化吗?要回答这个问题,查看最老(59 岁以上)和最年轻 (不到 20 岁)年龄段人口之间的关系。使用气泡图可以确定该关系如何随时间变化。

创建气泡图
1. 打开年龄组.jmp 数据表。
2. 选择图形 > 气泡图。

[转载]动态气泡图
3. 选择 60+ 岁人口比并点击 Y。这对应于气泡图中的 Y 变量。
4. 选择 0-19 岁人口比并点击 X。这对应于气泡图中的 X 变量。
5. 选择国家并点击 ID。
ID 变量的每个唯一水平由图形中的气泡表示。
6. 选择年份并点击时间。这控制制作气泡图动画时的时间指标。
7. 选择人口并点击大小。这控制气泡的大小。
8. 选择地区并点击颜色。“颜色”变量的每个唯一水平由气泡的颜色表示。在本示例中,表示位于同一地区的不同国家的所有气泡都是相同的颜色。
9. 点击确定。

[转载]动态气泡图

因为时间变量 (本示例中为“年份”)从 1950 开始,初始气泡图显示 1950 年的数据。点击执行可以使气泡图产生所有年份的循环动画。每个连续的气泡图显示对应年份的数据。

1950 年的气泡图显示,若不到 20 岁的年轻人比例高,则 59 岁以上的人口比例低。

点击执行播放随年份的推移而变化的气泡图动画。随着时间推进, 0-19 岁人口比人口减少,60+ 岁人口比人口增加。气泡图表示世界人口在逐渐变老。

点击可选择某个气泡以查看它随时间的变化趋势。例如,在 1950 年的图形中,中间的大气泡是“日本”。点击 “日本”气泡的中间将其选定。从红色小三角菜单中,选择尾迹气泡。点击执行。随着动画的播放,“日本”气泡留下了气泡尾迹来演示气泡的历史轨迹。

[转载]动态气泡图

最后可以将以上动画保存为SWF文件,嵌入到Excel中进行使用,点此下载

Hans Rosling将动态气泡图演绎的淋漓尽致,例如下面的4分钟:3D技术展现200国家的200年。

 如果是第一次看到这个视频,也许会觉得比较震撼吧!

@小蚊子乐园 在博客上发表过一篇文章:《动态气泡图,EXCEL也能》,后来@zm0115 使用VBA做了一些改进,使动态效果在Excel中表现得更自动连贯一些:《用vba创建的动态气泡图》。

感谢@演绎生动Excel图表 提供了两个相关链接:《接触国外最佳图表实践运动图Motion Chart》和《运动图Motion Chart》。

欢迎评论和转载,转载请注明来源于@数据化分析 的博客:http://blog.sina.com.cn/data2analysis,除非特别声明,本站采用许可:署名,非商业。多谢支持!

 

2012.3.14

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要绘制Python中的动态气泡,可以使用matplotlib库中的scatter函数。首先,需要定义气泡中每个点的坐标、大小和颜色。然后,使用animation模块中的FuncAnimation函数来创建动画效果。下面是一个简单的示例代码: ```python import matplotlib.pyplot as plt import matplotlib.animation as animation import random # 随机生成气泡数据 x = [random.randint(0, 100) for _ in range(50)] y = [random.randint(0, 100) for _ in range(50)] size = [random.randint(50, 500) for _ in range(50)] colors = [random.randint(0, 255) for _ in range(50)] # 定义动画更新函数 def update(num): ax.clear() ax.scatter(x[:num], y[:num], s=size[:num], c=colors[:num], alpha=0.5) ax.set_xlim(0, 100) ax.set_ylim(0, 100) ax.set_title('Dynamic Bubble Chart') # 创建动画对象 fig, ax = plt.subplots() ani = animation.FuncAnimation(fig, update, frames=50, interval=500) plt.show() ``` 在这个示例中,我们先随机生成了50个气泡点的坐标、大小和颜色。然后,定义了一个update函数,用于更新气泡的显示。在update函数中,我们先清空当前坐标轴,然后使用scatter函数绘制前num个气泡点。最后,设置坐标轴的范围和标题。 接下来,我们创建了一个动画对象,使用FuncAnimation函数,将update函数和50个帧(即气泡点的个数)传递进去。同时,设置了每帧之间的时间间隔为500毫秒。最后,使用plt.show()函数来显示动画效果。 你可以根据自己的需求,调整气泡点的坐标、大小、颜色、动画帧数和时间间隔等参数,来创建自己的动态气泡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值