许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Altair:一个让人爱不释手的Python超强数据可视化库

Altair:一个让人爱不释手的Python超强数据可视化库

阅读数 11
点赞 0
article_banner

由下面代码生成

from chord import Chord matrix = [    [0, 5, 6, 4, 7, 4],    [5, 0, 5, 4, 6, 5],    [6, 5, 0, 4, 5, 5],    [4, 4, 4, 0, 5, 5],    [7, 6, 5, 5, 0, 4],    [4, 5, 5, 5, 4, 0],] names = ["Action", "Adventure", "Comedy", "Drama", "Fantasy", "Thriller"] # 保存Chord(matrix, names).to_html("chord-diagram.html")

图形表现力强悍!

Altair概述

Altair是一个用于Python的声明式统计可视化库,基于Vega和Vega-Lite。

Altair提供了一个强大而简洁的可视化语法,使你能够快速建立一个广泛的统计可视化。下面是一个使用Altair API的例子,通过一个交互式散点图快速实现数据集的可视化。

Github:

https://altair-viz.github.io/getting_started/overview.html

c9070f20e53a946a721f68d698436dac.png

表现强悍

e496eda56614a674a9cbdc310c70a756.png

图形表现力强悍!

import matplotlib.pyplot as plt # 创建数据size_of_groups = [12, 11, 3, 30] # 生成饼图plt.pie(size_of_groups) # 在中心添加一个圆, 生成环形图my_circle = plt.Circle((0, 0), 0.7, color='white')p = plt.gcf()p.gca().add_artist(my_circle) plt.show()

d66c09b16863d3a336dc2e091843ac50.jpeg

image.png

import matplotlib.pyplot as pltfrom matplotlib_venn import venn2 # 创建图表venn2(subsets=(10, 5, 2), set_labels=('Group A', 'Group B')) # 显示plt.show()

6cd0cceb29ab70d0a30645bbd511f665.jpeg

image.png

import circlifyimport matplotlib.pyplot as plt # 创建画布, 包含一个子图fig, ax = plt.subplots(figsize=(14, 14)) # 标题ax.set_title('Repartition of the world population') # 移除坐标轴ax.axis('off') # 人口数据data = [{'id': 'World', 'datum': 6964195249, 'children': [              {'id': "North America", 'datum': 450448697,                  'children': [                     {'id': "United States", 'datum': 308865000},                     {'id': "Mexico", 'datum': 107550697},                     {'id': "Canada", 'datum': 34033000}                   ]},              {'id': "South America", 'datum': 278095425,                  'children': [                     {'id': "Brazil", 'datum': 192612000},                     {'id': "Colombia", 'datum': 45349000},                     {'id': "Argentina", 'datum': 40134425}                   ]},              {'id': "Europe", 'datum': 209246682,                  'children': [                     {'id': "Germany", 'datum': 81757600},                     {'id': "France", 'datum': 65447374},                     {'id': "United Kingdom", 'datum': 62041708}                   ]},              {'id': "Africa", 'datum': 311929000,                  'children': [                     {'id': "Nigeria", 'datum': 154729000},                     {'id': "Ethiopia", 'datum': 79221000},                     {'id': "Egypt", 'datum': 77979000}                   ]},              {'id': "Asia", 'datum': 2745929500,                  'children': [                     {'id': "China", 'datum': 1336335000},                     {'id': "India", 'datum': 1178225000},                     {'id': "Indonesia", 'datum': 231369500}                   ]}    ]}] # 使用circlify()计算, 获取圆的大小, 位置circles = circlify.circlify(    data,    show_enclosure=False,    target_enclosure=circlify.Circle(x=0, y=0, r=1))  lim = max(    max(        abs(circle.x) + circle.r,        abs(circle.y) + circle.r,    )    for circle in circles)plt.xlim(-lim, lim)plt.ylim(-lim, lim) for circle in circles:    if circle.level != 2:        continue    x, y, r = circle    ax.add_patch(plt.Circle((x, y), r, alpha=0.5, linewidth=2, color="lightblue")) for circle in circles:    if circle.level != 3:        continue    x, y, r = circle    label = circle.ex["id"]    ax.add_patch(plt.Circle((x, y), r, alpha=0.5, linewidth=2, color="#69b3a2"))    plt.annotate(label, (x, y), ha='center', color="white") for circle in circles:    if circle.level != 2:        continue    x, y, r = circle    label = circle.ex["id"]    plt.annotate(label, (x, y), va='center', ha='center', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round', pad=.5)) plt.show()

10dfca5e63d4f1b1944ebfb535c87b38.jpeg

image.png

import foliumimport pandas as pd # 创建地图对象m = folium.Map(location=[20,0], tiles="OpenStreetMap", zoom_start=2) # 坐标点数据data = pd.DataFrame({   'lon': [-58, 2, 145, 30.32, -4.03, -73.57, 36.82, -38.5],   'lat': [-34, 49, -38, 59.93, 5.33, 45.52, -1.29, -12.97],   'name': ['Buenos Aires', 'Paris', 'melbourne', 'St Petersbourg', 'Abidjan', 'Montreal', 'Nairobi', 'Salvador'],   'value': [10, 12, 40, 70, 23, 43, 100, 43]}, dtype=str) # 添加气泡for i in range(0, len(data)):    folium.Circle(      location=[data.iloc[i]['lat'], data.iloc[i]['lon']],      popup=data.iloc[i]['name'],      radius=float(data.iloc[i]['value'])*20000,      color='crimson',      fill=True,      fill_color='crimson'    ).add_to(m) # 保存m.save('bubble-map.html')

6d4cede7a1c98da50420fe366c021119.jpeg

image.png

import altair as altfrom vega_datasets import data boroughs = alt.topo_feature(data.londonBoroughs.url, 'boroughs')tubelines = alt.topo_feature(data.londonTubeLines.url, 'line')centroids = data.londonCentroids.url background = alt.Chart(boroughs).mark_geoshape(    stroke='white',    strokeWidth=2).encode(    color=alt.value('#eee'),).properties(    width=700,    height=500) labels = alt.Chart(centroids).mark_text().encode(    longitude='cx:Q',    latitude='cy:Q',    text='bLabel:N',    size=alt.value(8),    opacity=alt.value(0.6)).transform_calculate(    "bLabel", "indexof (datum.name,' ') > 0 ? substring(datum.name,0,indexof(datum.name, ' ')) : datum.name") line_scale = alt.Scale(domain=["Bakerloo", "Central", "Circle", "District", "DLR",                               "Hammersmith & City", "Jubilee", "Metropolitan", "Northern",                               "Piccadilly", "Victoria", "Waterloo & City"],                       range=["rgb(137,78,36)", "rgb(220,36,30)", "rgb(255,206,0)",                              "rgb(1,114,41)", "rgb(0,175,173)", "rgb(215,153,175)",                              "rgb(106,114,120)", "rgb(114,17,84)", "rgb(0,0,0)",                              "rgb(0,24,168)", "rgb(0,160,226)", "rgb(106,187,170)"]) lines = alt.Chart(tubelines).mark_geoshape(    filled=False,    strokeWidth=2).encode(    alt.Color(        'id:N',        legend=alt.Legend(            title=None,            orient='bottom-right',            offset=0        ),        scale=line_scale    )) background + labels + lines

952de23ea37c0828203fd31f8a8ae9d0.jpeg

image.png

import altair as altfrom vega_datasets import data source = data.disasters.url alt.Chart(source).mark_circle(    opacity=0.8,    stroke='black',    strokeWidth=1).encode(    alt.X('Year:O', axis=alt.Axis(labelAngle=0)),    alt.Y('Entity:N'),    alt.Size('Deaths:Q',        scale=alt.Scale(range=[0, 4000]),        legend=alt.Legend(title='Annual Global Deaths')    ),    alt.Color('Entity:N', legend=None)).properties(    width=450,    height=320).transform_filter(    alt.datum.Entity != 'All natural disasters')

0726ea28912b29ec37ade89646a53cd1.jpeg

image.png

import altair as altimport pandas as pd source = pd.DataFrame([      {'country': 'Great Britain', 'animal': 'cattle'},      {'country': 'Great Britain', 'animal': 'cattle'},      {'country': 'Great Britain', 'animal': 'cattle'},      {'country': 'Great Britain', 'animal': 'pigs'},      {'country': 'Great Britain', 'animal': 'pigs'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'Great Britain', 'animal': 'sheep'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'cattle'},      {'country': 'United States', 'animal': 'pigs'},      {'country': 'United States', 'animal': 'pigs'},      {'country': 'United States', 'animal': 'pigs'},      {'country': 'United States', 'animal': 'pigs'},      {'country': 'United States', 'animal': 'pigs'},      {'country': 'United States', 'animal': 'pigs'},      {'country': 'United States', 'animal': 'sheep'},      {'country': 'United States', 'animal': 'sheep'},      {'country': 'United States', 'animal': 'sheep'},      {'country': 'United States', 'animal': 'sheep'},      {'country': 'United States', 'animal': 'sheep'},      {'country': 'United States', 'animal': 'sheep'},      {'country': 'United States', 'animal': 'sheep'}    ]) domains = ['person', 'cattle', 'pigs', 'sheep'] shape_scale = alt.Scale(    domain=domains,    range=[        'M1.7 -1.7h-0.8c0.3 -0.2 0.6 -0.5 0.6 -0.9c0 -0.6 -0.4 -1 -1 -1c-0.6 0 -1 0.4 -1 1c0 0.4 0.2 0.7 0.6 0.9h-0.8c-0.4 0 -0.7 0.3 -0.7 0.6v1.9c0 0.3 0.3 0.6 0.6 0.6h0.2c0 0 0 0.1 0 0.1v1.9c0 0.3 0.2 0.6 0.3 0.6h1.3c0.2 0 0.3 -0.3 0.3 -0.6v-1.8c0 0 0 -0.1 0 -0.1h0.2c0.3 0 0.6 -0.3 0.6 -0.6v-2c0.2 -0.3 -0.1 -0.6 -0.4 -0.6z',        'M4 -2c0 0 0.9 -0.7 1.1 -0.8c0.1 -0.1 -0.1 0.5 -0.3 0.7c-0.2 0.2 1.1 1.1 1.1 1.2c0 0.2 -0.2 0.8 -0.4 0.7c-0.1 0 -0.8 -0.3 -1.3 -0.2c-0.5 0.1 -1.3 1.6 -1.5 2c-0.3 0.4 -0.6 0.4 -0.6 0.4c0 0.1 0.3 1.7 0.4 1.8c0.1 0.1 -0.4 0.1 -0.5 0c0 0 -0.6 -1.9 -0.6 -1.9c-0.1 0 -0.3 -0.1 -0.3 -0.1c0 0.1 -0.5 1.4 -0.4 1.6c0.1 0.2 0.1 0.3 0.1 0.3c0 0 -0.4 0 -0.4 0c0 0 -0.2 -0.1 -0.1 -0.3c0 -0.2 0.3 -1.7 0.3 -1.7c0 0 -2.8 -0.9 -2.9 -0.8c-0.2 0.1 -0.4 0.6 -0.4 1c0 0.4 0.5 1.9 0.5 1.9l-0.5 0l-0.6 -2l0 -0.6c0 0 -1 0.8 -1 1c0 0.2 -0.2 1.3 -0.2 1.3c0 0 0.3 0.3 0.2 0.3c0 0 -0.5 0 -0.5 0c0 0 -0.2 -0.2 -0.1 -0.4c0 -0.1 0.2 -1.6 0.2 -1.6c0 0 0.5 -0.4 0.5 -0.5c0 -0.1 0 -2.7 -0.2 -2.7c-0.1 0 -0.4 2 -0.4 2c0 0 0 0.2 -0.2 0.5c-0.1 0.4 -0.2 1.1 -0.2 1.1c0 0 -0.2 -0.1 -0.2 -0.2c0 -0.1 -0.1 -0.7 0 -0.7c0.1 -0.1 0.3 -0.8 0.4 -1.4c0 -0.6 0.2 -1.3 0.4 -1.5c0.1 -0.2 0.6 -0.4 0.6 -0.4z',        'M1.2 -2c0 0 0.7 0 1.2 0.5c0.5 0.5 0.4 0.6 0.5 0.6c0.1 0 0.7 0 0.8 0.1c0.1 0 0.2 0.2 0.2 0.2c0 0 -0.6 0.2 -0.6 0.3c0 0.1 0.4 0.9 0.6 0.9c0.1 0 0.6 0 0.6 0.1c0 0.1 0 0.7 -0.1 0.7c-0.1 0 -1.2 0.4 -1.5 0.5c-0.3 0.1 -1.1 0.5 -1.1 0.7c-0.1 0.2 0.4 1.2 0.4 1.2l-0.4 0c0 0 -0.4 -0.8 -0.4 -0.9c0 -0.1 -0.1 -0.3 -0.1 -0.3l-0.2 0l-0.5 1.3l-0.4 0c0 0 -0.1 -0.4 0 -0.6c0.1 -0.1 0.3 -0.6 0.3 -0.7c0 0 -0.8 0 -1.5 -0.1c-0.7 -0.1 -1.2 -0.3 -1.2 -0.2c0 0.1 -0.4 0.6 -0.5 0.6c0 0 0.3 0.9 0.3 0.9l-0.4 0c0 0 -0.4 -0.5 -0.4 -0.6c0 -0.1 -0.2 -0.6 -0.2 -0.5c0 0 -0.4 0.4 -0.6 0.4c-0.2 0.1 -0.4 0.1 -0.4 0.1c0 0 -0.1 0.6 -0.1 0.6l-0.5 0l0 -1c0 0 0.5 -0.4 0.5 -0.5c0 -0.1 -0.7 -1.2 -0.6 -1.4c0.1 -0.1 0.1 -1.1 0.1 -1.1c0 0 -0.2 0.1 -0.2 0.1c0 0 0 0.9 0 1c0 0.1 -0.2 0.3 -0.3 0.3c-0.1 0 0 -0.5 0 -0.9c0 -0.4 0 -0.4 0.2 -0.6c0.2 -0.2 0.6 -0.3 0.8 -0.8c0.3 -0.5 1 -0.6 1 -0.6z',        'M-4.1 -0.5c0.2 0 0.2 0.2 0.5 0.2c0.3 0 0.3 -0.2 0.5 -0.2c0.2 0 0.2 0.2 0.4 0.2c0.2 0 0.2 -0.2 0.5 -0.2c0.2 0 0.2 0.2 0.4 0.2c0.2 0 0.2 -0.2 0.4 -0.2c0.1 0 0.2 0.2 0.4 0.1c0.2 0 0.2 -0.2 0.4 -0.3c0.1 0 0.1 -0.1 0.4 0c0.3 0 0.3 -0.4 0.6 -0.4c0.3 0 0.6 -0.3 0.7 -0.2c0.1 0.1 1.4 1 1.3 1.4c-0.1 0.4 -0.3 0.3 -0.4 0.3c-0.1 0 -0.5 -0.4 -0.7 -0.2c-0.3 0.2 -0.1 0.4 -0.2 0.6c-0.1 0.1 -0.2 0.2 -0.3 0.4c0 0.2 0.1 0.3 0 0.5c-0.1 0.2 -0.3 0.2 -0.3 0.5c0 0.3 -0.2 0.3 -0.3 0.6c-0.1 0.2 0 0.3 -0.1 0.5c-0.1 0.2 -0.1 0.2 -0.2 0.3c-0.1 0.1 0.3 1.1 0.3 1.1l-0.3 0c0 0 -0.3 -0.9 -0.3 -1c0 -0.1 -0.1 -0.2 -0.3 -0.2c-0.2 0 -0.3 0.1 -0.4 0.4c0 0.3 -0.2 0.8 -0.2 0.8l-0.3 0l0.3 -1c0 0 0.1 -0.6 -0.2 -0.5c-0.3 0.1 -0.2 -0.1 -0.4 -0.1c-0.2 -0.1 -0.3 0.1 -0.4 0c-0.2 -0.1 -0.3 0.1 -0.5 0c-0.2 -0.1 -0.1 0 -0.3 0.3c-0.2 0.3 -0.4 0.3 -0.4 0.3l0.2 1.1l-0.3 0l-0.2 -1.1c0 0 -0.4 -0.6 -0.5 -0.4c-0.1 0.3 -0.1 0.4 -0.3 0.4c-0.1 -0.1 -0.2 1.1 -0.2 1.1l-0.3 0l0.2 -1.1c0 0 -0.3 -0.1 -0.3 -0.5c0 -0.3 0.1 -0.5 0.1 -0.7c0.1 -0.2 -0.1 -1 -0.2 -1.1c-0.1 -0.2 -0.2 -0.8 -0.2 -0.8c0 0 -0.1 -0.5 0.4 -0.8z'    ]) color_scale = alt.Scale(    domain=domains,    range=['rgb(162,160,152)', 'rgb(194,81,64)', 'rgb(93,93,93)', 'rgb(91,131,149)']) alt.Chart(source).mark_point(filled=True, opacity=1, size=100).encode(    alt.X('x:O', axis=None),    alt.Y('animal:O', axis=None),    alt.Row('country:N', header=alt.Header(title='')),    alt.Shape('animal:N', legend=None, scale=shape_scale),    alt.Color('animal:N', legend=None, scale=color_scale),).transform_window(    x='rank()',    groupby=['country', 'animal']).properties(width=550, height=140)

4c56994bb2790585fe1660258b33236c.jpeg

提供丰富的图形代码

e814bd498ca65156c0b4049a084a0248.png

5dd0a57b72434ac0b2b1b20444aab5d2.png

da33207be4b5afefcf405ef5e01b0c6b.png

76de8d4043f077d2a3cfd6c02fb30f97.png

25b12a14722bffd14a2ebfef10ecd8dd.png

e636b4e6a5b3f7f6300cbb66d4a61cd3.png

658227d4f5abd7d9582e0d7907e4a2d0.png

ef26e0f732366d8783c8dc58a3c631c3.png

5f4dbef1743befc3f7b44fe2c7e1d5f9.png

4b67543cca8a1226f01d93d3e594864c.png

411f4b1e55a46f7d04b7e06c184db764.png

623c3c26e0acb2d99be1cf44207c1408.png

92264d6da14e07a2b5243bca7a3150db.png

7aa7cbd52a65bee4c3af86135429a858.png

61a58d80686389d453e5d2e0aa870931.png


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空