Python数据可视化的五种方法小结
目录
- 1.和弦图
- 2.旭日图
- 3.六边形热力图
- 4.桑基图
- 5.流图(主题河流图)
1.和弦图
和弦图以富有创意的方式呈现数据点间的复杂关系。
在和弦图中,节点环绕成一个圆形,通过弧线彼此相连。弧长对应连接值的大小,而弧线的粗细则直观体现关系的重要程度。同时,利用不同颜色对数据进行分类,方便用户进行对比分析。
因其强大的关系展示能力,和弦图被广泛应用于众多领域,在基因数据可视化方面表现尤为突出。
下面用 Holoviews 和 Bokeh 库,来创建一个展示五个国家贸易关系的和弦图。
import holoviews as hv from holoviews import opts import pandas as pd import numpy as np hv.extension('bokeh') # 代表5个国家之间出口量的示例矩阵 export_data = np.array([[0, 50, 30, 20, 10], [10, 0, 40, 30, 20], [20, 10, 0, 35, 25], [30, 20, 10, 0, 40], [25, 15, 30, 20, 0]]) labels = ['美国', '中国', '德国', '日本', '印度'] # 创建一个pandas DataFrame df = pd.DataFrame(export_data, index=labels, columns=labels) df = df.stack().reset_index() df.columns = ['来源', '目标', '数值'] # 创建一个Chord对象 chord = hv.Chord(df) # 对和弦图进行样式设置 chord.opts( opts.Chord( cmap='Category20', edge_cmap='Category20', labels='source', label_text_font_size='10pt', edge_color='source', node_color='index', width=700, height=700 ) ).select(value=(5, None)) # 显示图表 chord
2.旭日图&nbandroidsp;
旭日图超越了传统的饼图和环形图,能够清晰展示层次结构数据。
旭日图用同心圆表示不同层级,中心是根节点,扇形代表具体节点。扇形大小和数据值挂钩,数据重要程度一目了然。
在可视化文件系统层级结构、用户导航路径、市场细分和基因数据等方面很有用,下面是使用Plotly库创建旭日图的示例。
import plotly.express as px import numpy as np df = px.data.gapminder().query("year == 2007") fig = px.sunburst(df, path=['continent', 'country'], values='pop', color='lifeExp', hover_data=['iso_alpha'], color_continuous_scale='RdBu', color_continuous_midpoinjavascriptt=np.average(df['lifeExp'], weights=df['pop'])) fig.show()
3.六边形热力图
六边形热力图(Hexbin Plot),即六边形分箱图,在可视化二维数据分布方面非常有效,尤其适用于数据点密集的情况。它将数据空间划分为六边形单元格,单元格颜色表示其中数据点的数量,能清晰呈现数据的分布情况。
下面是使用python和Matplotlib创建六边形热力图的示例,展示空气质量指数(AQI)和医院就诊人数之间的相关性。
import numpy as np import matplotlib.pyplot as plt from mplhexbin import HexBin # 模拟数据 np.random.seed(0) # 确保结果编程客栈可复现 n_points = 10000 x = np.random.rand(n_points) * 100# 空气质量指数(AQI)取值范围为0到100 y = 5 * np.sin(x * np.pi / 50) + np.random.randn(n_points) * 15# 模拟的医院就诊人数,与AQI相关但存在噪声 # 创建一个新的图形 fig, ax = plt.subplots(figsize=(10, 8)) # 使用HexBin创建六边形分箱图 hb = HexBin(ax, gridsize=20, cmap='viridis', extent=[0, 100, -30, 50]) # 设置网格大小、颜色映射和范围 hb.hexbin(x, y, mincnt=1) # 绘制六边形分箱图,mincnt设置最小计数阈值 # 添加标题和轴标签 ax.set_title('空气质量指数(AQI)与医院就诊人数之间的关系') ax.set_xlabel('空气质量指数(AQI)') ax.set_ylabel('医院就诊人数') # 显示图形 plt.colorbar(hb.cmap, ax=ax, label='数据点数量') # 添加颜色条并设置标签 plt.show()
4.桑基图
桑基图用于可视化数据流动,非常适合展示能源、材料和金融等领域的数据。
它以马修·亨利·菲尼亚斯·里亚尔·桑基(Matthew Henry Phineas Riall Sankey)的名字命名,能展示系统各阶段或各部分之间的流量。节点宽度与流量大小成正比,便于理解数据的规模和流向。
下面是使用Python创建桑基图的示例,展示从生产源头到小城市消费者的能源流动情况。
import plotly.graph_objects as go labels = ["煤炭", "太阳能", "风能", "核能", "居民", "工业", "商业"] source = [0, 1, 2, 3, 0, 1, 2, 3] target = [4, 4, 4, 4, 5, 5, 5, 5] value = [25, 10, 40, 20, 30, 15, 25, 35] # 创建桑基图对象 fig = go.Figure(data=[go.Sankey( node=dict( pad=15, thickness=20, line=dict(color="black", width=0.5), label=l编程客栈abels ), link=dict( source=source, target=target, value=value ))]) fig.update_layout(title_text="模范城市的能源流动", font_size=12) fig.show()
5.流图(主题河流图)
流图形似河流,用于描绘数据随时间的变化。不同颜色区分不同类别,“河流”的宽度代表每个类别的数值大小。它以可视化的方式展示数据趋势和关系,便于理解数据动态。
下面是用Altair库创建流图的示例:
import altair as alt fro编程客栈m vega_datasets import data source = data.unemployment_across_industries.url alt.Chart(source).mark_area().encode( alt.X('yearmonth(date):T', axis=alt.Axis(format='%Y', domain=False, tickSize=0) ), alt.Y('sum(count):Q', stack='center', axis=None), alt.Color('series:N', scale=alt.Scale(scheme='category20b') ) ).interactive()
在数据驱动的时代,高级可视化图表为我们提供了挖掘数据深层价值的强大工具。无论是和弦图的复杂关系呈现、旭日图的层次结构解析,还是六边形热力图的数据分布洞察,桑基图的流动分析和流图的时间趋势展示,都拓展了我们对数据的理解维度。掌握这些工具,意味着能够用更专业、更精准的方式传递信息,让数据真正成为推动业务和科研进步的引擎。
以上就是Python数据可视化的五种方法小结的详细内容,更多关于Python数据可视化的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论