惊叹,Pyecharts绘制图表原来可以如此漂亮!

2024-02-07 04:10

本文主要是介绍惊叹,Pyecharts绘制图表原来可以如此漂亮!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文转载自公众号「杰哥的IT之旅」,作者旧时晚风拂晓城

Pyecharts

      • 一、Pyecharts简介和安装
      • 二、绘制地理图表
      • 三、柱形图
      • 四、饼图
      • 五、环图
      • 六、玫瑰图
      • 七、词云图
      • 八、仪表盘
      • 九、水球图
      • 十、折线图
      • 十一、箱形图

一、Pyecharts简介和安装

1、简介

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

简洁的 API 设计,使用如丝滑般流畅,支持链式调用
囊括了 30+ 种常见图表,应有尽有
支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
可轻松集成至 Flask,Sanic,Django 等主流 Web 框架
高度灵活的配置项,可轻松搭配出精美的图表
详细的文档和示例,帮助开发者更快的上手项目
多达 400+ 地图文件,并且支持原生百度地图,为地理数据可视化提供强有力的支持

pyecharts版本v0.5.x 和 v1 间不兼容,v1 是一个全新的版本,语法也有很大不同。

2、安装

安装 pyecharts

pip install pyecharts -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import pyechartsprint(pyecharts.__version__)         # 查看pyecharts版本

安装相关的地图扩展包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-countries-pypkg           # 全球国家地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-provinces-pypkg   # 中国省级地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-cities-pypkg      # 中国市级地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-counties-pypkg    # 中国县区级地图

二、绘制地理图表

1、世界地图—数据可视化

利用 Starbucks.csv 中的数据,首先计算每个国家(Country)对应的门店数量,然后使用世界地图表示星巴克门面店在全球的分布。

import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.globals import ThemeType, CurrentConfigCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'# 用pandas读取csv文件里的数据
df = pd.read_csv("Starbucks.csv")['Country']
data = df.value_counts()
datas = [(i, int(j)) for i, j in zip(data.index, data.values)]# 实例化一个Map对象
map_ = Map(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
# 世界地图
map_.add("门店数量", data_pair=datas, maptype="world")
map_.set_series_opts(label_opts=opts.LabelOpts(is_show=False))   # 不显示label
map_.set_global_opts(title_opts=opts.TitleOpts(title="星巴克门店数量在全球分布", pos_left='40%', pos_top='10'),   # 调整title位置legend_opts=opts.LegendOpts(is_show=False),visualmap_opts=opts.VisualMapOpts(max_=13608, min_=1, is_piecewise=True,pieces=[{"max": 9, "min": 1, "label": "1-9", "color": "#00FFFF"},        # 分段  添加图例注释和颜色{"max": 99, "min": 10, "label": "10-99", "color": "#A52A2A"},{"max": 499, "min": 100, "label": "100-499", "color": "#0000FF    "},{"max": 999, "min": 500, "label": "500-999", "color": "#FF00FF"},{"max": 2000, "min": 1000, "label": "1000-2000", "color": "#228B22"},{"max": 3000, "min": 2000, "label": "2000-3000", "color": "#FF0000"},{"max": 20000, "min": 10000, "label": ">=10000", "color": "#FFD700"}]))# 渲染在网页上   有交互性
map_.render('星巴克门店在全球的分布.html')

在这里插入图片描述

2、国家地图—数据可视化

涟漪散点图

利用china.csv 中的数据,首先计算每个城市(City)对应的门店数量,然后使用 pyecharts包内 Geo 模块绘制星巴克门面店在中国分布的涟漪散点地图。

import pandas as pd
from pyecharts.globals import ThemeType, CurrentConfig, GeoType
from pyecharts import options as opts
from pyecharts.charts import GeoCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# pandas读取csv文件数据
df = pd.read_csv("china.csv")['City']
data = df.value_counts()datas = [(i, int(j)) for i, j in zip(data.index, data.values)]
print(datas)geo = Geo(init_opts=opts.InitOpts(width='1000px', height='600px', theme=ThemeType.DARK))
geo.add_schema(maptype='china', label_opts=opts.LabelOpts(is_show=True))   # 显示label  省名
geo.add('门店数量', data_pair=datas, type_=GeoType.EFFECT_SCATTER, symbol_size=8)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(title_opts=opts.TitleOpts(title='星巴克门店在中国的分布'),visualmap_opts=opts.VisualMapOpts(max_=550, is_piecewise=True,pieces=[{"max": 50, "min": 0, "label": "0-50", "color": "#708090"},        # 分段  添加图例注释  和颜色{"max": 100, "min": 51, "label": "51-100", "color": "#00FFFF"},{"max": 200, "min": 101, "label": "101-200", "color": "#00008B"},{"max": 300, "min": 201, "label": "201-300", "color": "#8B008B"},{"max": 600, "min": 500, "label": "500-600", "color": "#FF0000"},]))geo.render("星巴克门店在中国的分布.html")

运行效果如下:
在这里插入图片描述

动态轨迹图

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType, CurrentConfigCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 链式调用
c = (Geo().add_schema(maptype="china",itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),label_opts=opts.LabelOpts(is_show=True)).add("",[("广州", 55), ("北京", 66), ("杭州", 77), ("重庆", 88), ('成都', 100), ('海口', 80)],type_=ChartType.EFFECT_SCATTER,color="white",).add("",[("广州", "上海"), ("广州", "北京"), ("广州", "杭州"), ("广州", "重庆"),('成都', '海口'), ('海口', '北京'), ('海口', '重庆'), ('重庆', '上海')],type_=ChartType.LINES,effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=6, color="blue"),linestyle_opts=opts.LineStyleOpts(curve=0.2),).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="动态轨迹图")).render("geo_lines_background.html")
)

运行效果如下:
在这里插入图片描述

3、省市地图—数据可视化

热力图

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import GeoType, CurrentConfigCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'c = (Geo().add_schema(maptype="广东", label_opts=opts.LabelOpts(is_show=True)).add("热力图",[list(z) for z in zip(Faker.guangdong_city, Faker.values())],type_=GeoType.HEATMAP,).set_series_opts(label_opts=opts.LabelOpts(is_show=True)).set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-广东地图")).render("geo_guangdong.html")
)

运行效果如下:
在这里插入图片描述

在地图上批量添加地址、经纬度数据,地理数据可视化

代码如下:

import pandas as pd     # 导入数据分析模块
from pyecharts.charts import Geo    # 导入地理信息处理模块
from pyecharts import options as opts   # 配置
from pyecharts.globals import GeoType, CurrentConfig, ThemeTypeCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel("hotel.xlsx")# 获取 地点  经纬度信息
geo_sight_coord = {df.iloc[i]['酒店地址']: [df.iloc[i]['经度'], df.iloc[i]['纬度']] for i in range(len(df))}
data = [(df['酒店地址'][j], f"{int(df['最低价'][j])}元(最低价)") for j in range(len(df))]
# print(data)
# print(geo_sight_coord)g = Geo(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, width="1000px", height="600px"))
g.add_schema(maptype="北京")
for k, v in list(geo_sight_coord.items()):# 添加地址、经纬度数据g.add_coordinate(k, v[0], v[1])# 涟漪散点图
g.add("", data_pair=data, type_=GeoType.EFFECT_SCATTER, symbol_size=6)
g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
g.set_global_opts(title_opts=opts.TitleOpts(title="北京-酒店地址分布"))
g.render("酒店地址分布.html")

运行效果如下:
在这里插入图片描述

三、柱形图

代码如下:

from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType, CurrentConfig
from pyecharts import options as optsCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 链式调用
c = (Bar(init_opts=opts.InitOpts(           # 初始配置项theme=ThemeType.MACARONS,animation_opts=opts.AnimationOpts(animation_delay=1000, animation_easing="cubicOut"   # 初始动画延迟和缓动效果))).add_xaxis(xaxis_data=Faker.choose())      # x轴.add_yaxis(series_name="商家A", yaxis_data=Faker.values())       # y轴.add_yaxis(series_name="商家B", yaxis_data=Faker.values())       # y轴.set_global_opts(title_opts=opts.TitleOpts(title='标题', subtitle='副标题',   # 标题配置和调整位置title_textstyle_opts=opts.TextStyleOpts(font_family='SimHei', font_size=25, font_weight='bold', color='red',), pos_left="90%", pos_top="10",),xaxis_opts=opts.AxisOpts(name='x轴名称', axislabel_opts=opts.LabelOpts(rotate=45)), # 设置x名称和Label rotate解决标签名字过长使用yaxis_opts=opts.AxisOpts(name='y轴名称'),).render("bar_001.html")
)

运行效果如下:
在这里插入图片描述

代码如下:

import pandas as pd
import collections
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType, CurrentConfig
import randomCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel("hotel.xlsx")
area = list(df['酒店地址'])
area_list = []
for i in area:_index = i.find("区")# 字符串切片得到行政区名i = i[:_index + 1]area_list.append(i)area_count = collections.Counter(area_list)
area_dic = dict(area_count)# 两个列表对应   行政区  对应的酒店数量
area = [x for x in list(area_dic.keys())][0:10]
nums = [y for y in list(area_dic.values())][:10]# 定制风格
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
colors = ['red', '#0000CD', '#000000', '#008000', '#FF1493', '#FFD700', '#FF4500', '#00FA9A', '#191970', '#9932CC']
random.shuffle(colors)
# 配置y轴数据  Baritem
y = []
for i in range(10):y.append(opts.BarItem(value=nums[i],itemstyle_opts=opts.ItemStyleOpts(color=colors[i])   # 设置每根柱子的颜色))
bar.add_xaxis(xaxis_data=area)
bar.add_yaxis("酒店数量", yaxis_data=y)
bar.set_global_opts(xaxis_opts=opts.AxisOpts(name='行政区',axislabel_opts=opts.LabelOpts(rotate=45)),yaxis_opts=opts.AxisOpts(name='酒店数量', min_=0, max_=330,     # y轴刻度的最小值 最大值),title_opts=opts.TitleOpts(title="行政区-酒店数量",title_textstyle_opts=opts.TextStyleOpts(font_family="KaiTi", font_size=25, color="black")))
# 标记最大值  最小值  平均值   标记平均线
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),opts.MarkPointItem(type_="average", name="平均值")]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均值")]))
bar.render("行政区酒店数量最多的Top10.html")

运行效果如下:
在这里插入图片描述

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType, CurrentConfigCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add_xaxis(xaxis_data=Faker.days_attrs).add_yaxis("商家A", yaxis_data=Faker.days_values).set_global_opts(title_opts=opts.TitleOpts(title="Bar-DataZoom(slider+inside)"),datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],).render("bar_datazoom_both.html")
)

运行效果如下:

在这里插入图片描述

四、饼图

五、环图

六、玫瑰图

七、词云图

八、仪表盘

九、水球图

十、折线图

折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。

绘制2019年成都AQI指数走势图

import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.globals import CurrentConfigCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('2019年成都空气质量数据.csv')date = [x for x in range(len(df['日期']))]
value = [int(i) for i in df['AQI指数']]# 绘制折线图
line = Line()
line.add_xaxis(xaxis_data=date)
line.add_yaxis("AQI指数",       # 系列数据项value,           # y轴数据areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color='#00FFFF'),  # 设置图形透明度  填充颜色label_opts=opts.LabelOpts(is_show=False),   # 标签配置项markpoint_opts=opts.MarkPointOpts(          # 标记点配置项data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),opts.MarkPointItem(type_="average", name="平均值")]),markline_opts=opts.MarkLineOpts(            # 标记线配置项data=[opts.MarkLineItem(type_="average", name="平均值")])
)
line.set_global_opts(title_opts=opts.TitleOpts(title='2019成都AQI指数走势图(按日统计)')
)
line.render('2019成都AQI指数走势图(按日统计).html')

在这里插入图片描述

import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.globals import CurrentConfig, ThemeType
import mathCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('2019年成都空气质量数据.csv')[['日期', 'AQI指数']]
data = df['日期'].str.split('-', expand=True)[1]
df['月份'] = data# 按月份分组 聚合 统计每月AQI指数平均值
counts = df.groupby('月份').agg({'AQI指数': 'mean'})date = [f'{x}月' for x in range(1, 13)]
value = [math.ceil(i) for i in counts['AQI指数']]line = Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
line.set_colors(['red'])
line.add_xaxis(xaxis_data=date)
line.add_yaxis("AQI指数均值",    # 系列数据项   用于图例筛选value,            # y轴数据label_opts=opts.LabelOpts(is_show=False),markpoint_opts=opts.MarkPointOpts(    # 标记点配置项data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),opts.MarkPointItem(type_="average", name="平均值")]),markline_opts=opts.MarkLineOpts(         # 标记线配置项data=[opts.MarkLineItem(type_="average", name="平均值")])
)
line.set_global_opts(      # 全局配置项title_opts=opts.TitleOpts(title='2019成都AQI全年走势图(按月统计)',pos_left='32%', pos_top='3%',title_textstyle_opts=opts.TextStyleOpts(font_family='SimHei', font_size=20, color='#F0FFF0')),xaxis_opts=opts.AxisOpts(name='月份'),          # x轴标签yaxis_opts=opts.AxisOpts(name='AQI指数均值')    # y轴标签
)
line.render('2019成都AQI指数走势图(按月统计).html')

运行效果如下:
在这里插入图片描述

十一、箱形图

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间。

在这里插入图片描述

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.globals import CurrentConfig, ThemeTypeCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_csv('2019年成都空气质量数据.csv')[['日期', 'AQI指数']]
df.sort_values(by='AQI指数', inplace=True)     # 按AQI指数大小排序 升序
data = df['日期'].str.split('-', expand=True)[1]
df['月份'] = data
item1, item2, item3, item4 = [], [], [], []# 分为4个季度
for i, j in zip(df['月份'], df['AQI指数']):if i in ['01', '02', '03']:item1.append(j)elif i in ['04', '05', '06']:item2.append(j)elif i in ['07', '08', '09']:item3.append(j)elif i in ['10', '11', '12']:item4.append(j)x_data = [f'第{i}季度' for i in range(1, 5)]
y_data = [item1, item2, item3, item4]
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
boxplot.set_colors(['red'])
boxplot.add_xaxis(xaxis_data=x_data)
boxplot.add_yaxis(series_name='', y_axis=boxplot.prepare_data(y_data))
boxplot.set_global_opts(title_opts=opts.TitleOpts(title='2019年成都季度AQI指数箱型图',pos_left='300', pos_top='5',title_textstyle_opts=opts.TextStyleOpts(font_family='KaiTi', font_size=20, color='black')),xaxis_opts=opts.AxisOpts(name='季度'),yaxis_opts=opts.AxisOpts(name='AQI指数')
)
boxplot.render('2019年成都季度AQI指数箱型图.html')

运行效果如下:
在这里插入图片描述

https://mp.weixin.qq.com/s/-m91dfY8BjKhIl4xLIljwg

这篇关于惊叹,Pyecharts绘制图表原来可以如此漂亮!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686476

相关文章

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87