在上一期的分享里,我们一起完成了天文数据的检索、清洗,同时还学会了用Matplotlib对天文数据进行可视化呈现。还有哪些好用的可视化利器呢?本期精彩继续!
2.2 astropy.visualization
由于宇宙漫游创作大多使用的是天文数据,专门为天文数据处理而设计的Python包——Astropy的优势不言而喻。示例数据的天体坐标系投影图是什么样的?让我用astropy一探究竟。
2.2.1 天体坐标系的投影图
# 导入Astropy库中的SkyCoord类以及Astropy库的units模块(用于处理单位)
from astropy.coordinates import SkyCoord
import astropy.units as u
# 创建天球坐标对象
dec = data['combined_dec'] * u.deg
ra = data['combined_ra'] * u.deg
c =SkyCoord(ra, dec)
# 创建绘图窗口和坐标系
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='mollweide')
# 绘制散点图
ax.scatter(c.ra.wrap_at(180* u.deg).radian, c.dec.radian, s=200, alpha=0.5)
# 添加网格
plt.grid()
# 显示图形
plt.show()
在这段代码中,我利用Astropy库的SkyCoord类,将数据中的赤纬(combined_dec)和赤经(combined_ra)转换为Quantity对象,并创建了天球坐标对象c。接着,我又通过Matplotlib库创建了一个使用“Mollweide”投影的图形对象fig,并添加了子图ax。此外,我在子图中使用scatter方法绘制了散点图,将赤经和赤纬转换为弧度作为坐标,设置了点的大小和透明度。这样一张专业性拉满的天文数据可视化图表就生成了!
2.3 Pyecharts
[Echarts]是一个由百度开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。用Python的pyecharts可以方便使用。(https://github.com/pyecharts/pyecharts)
这个API的设计非常简洁且高效,它的使用体验流畅自如,并支持链式调用,极大地提高了开发效率。同时,它兼容Jupyter Notebook和JupyterLab等主流Notebook环境,使得数据分析和可视化工作变得更加便捷。不仅如此,该API还能够轻松集成到Flask、Django等流行的Web框架中,为用户提供了更多的应用场景。通过其高度灵活的配置选项,开发者可以轻松地定制出个性化的精美图表。此外,它还配备了详尽的文档和示例,帮助开发者更快速地掌握使用技巧。值得一提的是,该API还支持多达400+的地图文件以及原生的百度地图,为地理数据可视化提供了强大的支持。总的来说,这个API是一个功能强大且易于使用的工具,无论是数据分析师还是开发者,都能够从中受益。
这个工具看起来如此强大,就让我来试试看用pyechart能否做出效果更好的可视化图表吧!
2.3.1安装pyecharts
打开终端运行以下命令即可安装最新版,也可通过`pyecharts==xx`的形式下载指定版本。
pip install pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,就能进入python环境,查看pyecharts版本是否正确了:
import pyecharts
print(pyecharts.__version__)
2.3.2 5分钟上手pyecharts
还是先来画个饼图!
import pandas as pd
from pyecharts.charts import Pie
data_cleaned_file_name ='./data/30515_cleaned.csv'
data =pd.read_csv(data_cleaned_file_name)
# 统计每个唯一值的频率
value_counts = data['combined_subclass'].value_counts()
x_data = value_counts.index.tolist()
y_data = value_counts.tolist()
c = (
Pie()
.add("", [list(z) for z in zip(x_data, y_data)])
)
# render:渲染,会渲染成html文件,默认的文件名是render.html
c.render()
我们用浏览器打开html文件,就能看到渲染得到的饼图了,而且这个饼图还具备了一定的交互能力。
美中不足的是,现在绘制得到的图表还并不太美观。这时,我们就需要求助于“配置项”的帮助了,这是pyecharts技术里非常重要的概念。
2.3.3全局配置项
全局配置项在数据可视化中扮演着至关重要的角色,通过这些灵活而强大的配置项,开发者能够轻松地创建出高度定制、交互丰富的可视化图表,以满足不同数据分析和呈现需求。
pyecharts绘制得到的图表是否能够准确、优雅地表现数据信息,关键在于配置项的编写。幸运的是,其简洁的 API 设计(支持链式调用)、灵活的配置项以及详细的文档和示例都可以帮助我们降低学习成本,能够基于自身的数据完成可视化目标。
全局配置项可通过`set_global_opts`方法设置。具体参数包括:TitleOpts(用于定义图表的标题和样式),LegendOpts(控制图例的显示和布局),ToolboxOpts(提供一系列增强交互性的工具按钮),VisualMapOpts(设置数据到视觉元素的映射),TooltipOpts(定义鼠标悬停时显示的提示框内容和样式),以及DataZoomOpts(实现数据区域的缩放和漫游功能)。
看,调整后的图表是不是细节描绘更美观了!
从之前对数据的分析,我们已经了解到2021年6月12日所有的观测数据都是恒星(STAR)类型,没有星系和类星体。此外,我们进一步分析得到这批观测数据由1.8%的A型恒星、28.0%的F型恒星、54.2%的G型恒星和16.1%的K型恒星组成。
那我们使用这些数据还能在echart中做什么分析呢?
打开echart官方网站(https://pyecharts.org/#/zh-cn/quickstart),点击顶部菜单栏的“示例”,我们便可以看到很多图表样式,这些图表给了我很大的启发。示例数据中包含了恒星的有效温度和表面重力,也许我可以尝试做一个赫罗图。
包含恒星表面温度和表面重力的赫罗图
如果我们直接访问官方网站,再从中找到scatter-aggregate-bar示例(https://echarts.apache.org/examples/zh/editor.html?c=scatter-aggregate-bar),甚至还可以快速生成一个动态图像。我把这段代码也放在这里啦,大家点击代码文件就可以直接获取。
动态图像操作方法视频
掌握基础操作后,还可以尝试更多……
经过上面的操作,我已经基本掌握了数据可视化的基本方法,对创作和数据处理也有了更多的思路和想法。
之前使用astropy生成的天体坐标系投影图只显示了2021年6月21日当天观测的天体信息,从图中不难看出,由于单天的观测量有限,只能呈现出很少一部分天区的天体位置,信息量非常有限。如果将时间扩展至一周、一个月,乃至一年,就可以很直观地看出一段较长时间内曾经观测的区域,用来做数据分析也更有意义。
另外,投影图中除了展示天体的位置外,还可以导入更多的数据要素,通过为该元素定义颜色的方式,在投影图中呈现出更丰富的信息。
例如,可以用颜色来区分不同天体的视向速度:
用颜色表示不同天体的视向速度
或者可以导入红移数据来展示天体的运动:
用颜色表示不同天体的红移数据
如果希望将数据可视化结果应用在宇宙漫游创作中,那么我们制作出来的图表不仅要能够传达信息,同时还需要展现出美观和专业感。这时,在编程时引入一些额外的制作库让自己的图表如虎添翼就很有必要了。
eaborn就是这样的工具,它基于Matplotlib,以统计图形为核心,为用户提供了更为优雅高级的接口以及令人赏心悦目的默认主题。
我尝试着用seaborn的histplot函数来绘制了一下示例数据金属含量(combined_feh)、表面重力(combined_logg)、有效温度(combined_teff)的直方图,并通过添加核密度估计(KDE)使数据分布更加平滑和直观。通过调整bins参数,还可以精细控制直方图的条形数量,从而更准确地展示数据分布的特征。果然新的可视化效果看上去不止提升了一个档次!如果你也对数据可视化的美观度和专业性有更高的追求,不妨试试看哦!
用示例数据生成的直方图,从左到右分别展示的是:金属含量(combined_feh)、表面重力(combined_logg)、有效温度(combined_teff)
最后别忘了,实践才是硬道理
感谢大家有耐心看到这里,作为一名宇宙漫游和数据处理的双料新手,我仍然在不断探索之中。亲自实际操作后才发现,原来创作的过程并没有我想象中的那么难,甚至还有点让人欲罢不能!
数据可视化的世界还有更多有趣的内容等着我们去探索,希望大家有好的资源和方法也能跟我一起分享,期待咱们都能在宇宙漫游作品征集活动中收获精彩。