Python数据可视化之Pyecharts如何使用
这篇“Python数据可视化之Pyecharts如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python数据可视化之Pyecharts如何使用”文章吧。
1. 安装Pyecharts
pip install pyecharts
2. 图表基础
2.1 主题风格
添加主题风格使用的是 InitOpts() 方法,
该方法的主要参数有:
参数 | 描述 |
---|---|
width | 画布宽度,要求字符串格式,如 width=“500px” |
height | 画布高度,要求字符串格式,如 width=“500px” |
chart_id | 图表ID,作为图表的唯一标识。有多个图表时用来区分不同的图表 |
page_title | 网页,字符串格式 |
theme | 图表主题。由ThemeType模块提供 |
bg_color | 图表背景颜色,字符串格式 |
可以选择的风格有:
2.2 图表
给图表添加需要通过 set_global_options()方法 的 title_opts参数,
该参数的值通过opts模块的TitleOpts()方法生成,
且TitleOpts()方法主要参数语法如下:
2.3 图例
设置图例需要通过 set_global_opts()方法的 legend_opts参数,
该参数的参数值参考options模块的LegendOpts()方法。
LegendOpts() 方法的主要参数如下:
2.4 提示框
设置提示框主要是通过 set_global_opts()方法中的 tooltip_opts参数进行设置,
该参数的参数值参考options模块的TooltipOpts()方法。
TooltipOpts()方法的主要参数如下:
2.5 视觉映射
视觉映射通过 set_global_opts()方法中的 visualmap_opts参数进行设置,
该参数的取值参考options模块的VisualMapOpts()方法。
其主要参数如下:
2.6 工具箱
工具箱通过 set_global_opts()方法中的 toolbox_opts参数进行设置,
该参数的取值参考options模块的ToolboxOpts()方法。
其主要参数如下:
2.7 区域缩放
区域缩放通过 set_global_opts()方法中的 datazoom_opts参数进行设置,
该参数的取值参考options模块的DataZoomOpts()方法。
其主要参数如下:
3. 柱状图 Bar模块
绘制柱状图通过Bar模块来实现,
该模块的主要方法有:
主要方法 | 描述 |
---|---|
add_xaxis() | x轴数据 |
add_yaxis() | y轴数据 |
reversal_axis() | 翻转x、y轴数据 |
add_dataset() | 原始数据 |
下边展示一个简单的示例,先不使用过多复杂的样式:
import numpy as npfrom pyecharts.charts import Barfrom pyecharts import options as optsfrom pyecharts.globals import ThemeType# 生成数据years = [2011, 2012, 2013, 2014, 2015]y1 = [1, 3, 5, 7, 9]y2 = [2, 4, 6, 4, 2]y3 = [9, 7, 5, 3, 1]y4 = list(np.random.randint(1, 10, 10))bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))# 为柱状图添加x轴和y轴数据bar.add_xaxis(years)bar.add_yaxis('A型', y1)bar.add_yaxis('B型', y2)bar.add_yaxis('C型', y3)bar.add_yaxis('D型', y4)# 渲染图表到HTML文件,并保存在当前目录下bar.render("bar.html")
生成图像效果如下:
这里有一个无法解释的细节,就是可以看到y4数据,即D型,在图像中没有显示出来。经过小啾的反复尝试,发现凡是使用随机数产生的数据再转化成列表,这部分随机数不会被写入到html文件中:
既然不会解释,那就避免。
4. 折线图/面积图 Line模块
Line模块的主要方法有add_xaxis() 和 add_yaxis(),分别用来添加x轴数据和y轴数据。
add_yaxis()的主要参数如下:
4.1 折线图
绘制折线图时,x轴的数据必须是字符串,图线方可正常显示。
from pyecharts.charts import Linefrom pyecharts import options as optsfrom pyecharts.globals import ThemeType# 准备数据x = [2011, 2012, 2013, 2014, 2015]x_data = [str(i) for i in x]y1 = [1, 3, 2, 5, 8]y2 = [2, 6, 5, 6, 7]y3 = [5, 7, 4, 3, 1]line = Line(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))line.add_xaxis(xaxis_data=x_data)line.add_yaxis(series_name="A类", y_axis=y1)line.add_yaxis(series_name="B类", y_axis=y2)line.add_yaxis(series_name="C类", y_axis=y3)line.render("line.html")
生成图像效果如下:
4.2 面积图
绘制面积图时需要在add_yaxis()方法中指定areastyle_opts参数。其值由options模块的AreaStyleOpts()方法提供。
from pyecharts.charts import Linefrom pyecharts import options as optsfrom pyecharts.globals import ThemeTypex = [2011, 2012, 2013, 2014, 2015]x_data = [str(i) for i in x]y1 = [2, 5, 6, 8, 9]y2 = [1, 4, 5, 4, 7]y3 = [1, 3, 4, 6, 6]line = Line(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND))line.add_xaxis(xaxis_data=x_data)line.add_yaxis(series_name="A类", y_axis=y1, areastyle_opts=opts.AreaStyleOpts(opacity=1))line.add_yaxis(series_name="B类", y_axis=y2, areastyle_opts=opts.AreaStyleOpts(opacity=1))line.add_yaxis(series_name="C类", y_axis=y3, areastyle_opts=opts.AreaStyleOpts(opacity=1))line.render("line2.html")
图像效果如下:
5.饼形图
5.1 饼形图
绘制饼形图使用的是Pie模块,该模块中需要使用的主要方法是add()方法
该方法主要参数如下:
主要参数 | 描述 |
---|---|
series_name | 系列名称。用于提示文本和图例标签。 |
data_pair | 数据项,格式为形如[(key1,value1),(key2,value2)] |
color | 系列标签的颜色。 |
radius | 饼图的半径。默认设成百分比形式,默认是相对于容器的高和宽中较小的一方的一半 |
rosetype | 是否展开为南丁格尔玫瑰图,可以取的值有radius货area,radius表示通过扇区圆心角展现数据的大小,即默认的扇形图;area表示所有扇区的圆心角的角度相同,通过半径来展现数据大小 |
from pyecharts.charts import Piefrom pyecharts import options as optsfrom pyecharts.globals import ThemeTypex_data = ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF']y_data = [200, 200, 100, 400, 500, 600]# 将数据转换为目标格式data = [list(z) for z in zip(x_data, y_data)]# 数据排序data.sort(key=lambda x: x[1])pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))pie.add( series_name="类别", # 序列名称 data_pair=data, # 数据 )pie.set_global_opts( # 饼形图 title_opts=opts.TitleOpts( title="各类别数量分析", pos_left="center"), # 不显示图例 legend_opts=opts.LegendOpts(is_show=False), )pie.set_series_opts( # 序列标签 label_opts=opts.LabelOpts(), )pie.render("pie.html")
图像效果如下:
5.2 南丁格尔玫瑰图
from pyecharts.charts import Piefrom pyecharts import options as optsfrom pyecharts.globals import ThemeTypex_data = ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF', 'GGG', 'HHH', 'III', 'JJJ', 'KKK', 'LLL', 'MMM', 'NNN', 'OOO']y_data = [200, 100, 400, 50, 600, 300, 500, 700, 800, 900, 1000, 1100, 1200, 1300, 1500]# 将数据转换为目标格式data = [list(z) for z in zip(x_data, y_data)]# 数据排序data.sort(key=lambda x: x[1])# 创建饼形图并设置画布大小pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC, width='300px', height='400px'))# 为饼形图添加数据pie.add( series_name="类别", data_pair=data, radius=["8%", "160%"], # 内外半径 center=["65%", "65%"], # 位置 rosetype='area', # 玫瑰图,圆心角相同,按半径大小绘制 color='auto' # 颜色自动渐变 )pie.set_global_opts( # 不显示图例 legend_opts=opts.LegendOpts(is_show=False), # 视觉映射 visualmap_opts=opts.VisualMapOpts(is_show=False, min_=100, # 颜色条最小值 max_=450000, # 颜色条最大值 ))pie.set_series_opts( # 序列标签 label_opts=opts.LabelOpts(position='inside', # 标签位置 rotate=45, font_size=8) # 字体大小 )pie.render("pie2.html")
图像效果如下:
6. 箱线图 Boxplot模块
绘制箱线图使用的是Boxplot类。
这里有一个细节,准备y轴数据y_data时需要在列表外再套一层列表,否则图线不会被显示。
绘制箱线图使用的是Boxplot模块,
主要的方法有
add_xaxis()和add_yaxis()
from pyecharts.charts import Boxplotfrom pyecharts.globals import ThemeTypefrom pyecharts import options as optsy_data = [[5, 20, 22, 21, 23, 26, 25, 24, 28, 26, 29, 30, 50, 61]]boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.INFOGRAPHIC))boxplot.add_xaxis([""])boxplot.add_yaxis('', y_axis=boxplot.prepare_data(y_data))boxplot.render("boxplot.html")
图像效果如下:
7. 涟漪特效散点图 EffectScatter模块
绘制涟漪图使用的是EffectScatter模块,代码示例如下:
from pyecharts.charts import EffectScatterfrom pyecharts import options as optsfrom pyecharts.globals import ThemeTypex = [2011, 2012, 2013, 2014, 2015]x_data = [str(i) for i in x]y1 = [1, 3, 2, 5, 8]y2 = [2, 6, 5, 6, 7]y3 = [5, 7, 4, 3, 1]scatter = EffectScatter(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))scatter.add_xaxis(x_data)scatter.add_yaxis("", y1)scatter.add_yaxis("", y2)scatter.add_yaxis("", y3)# 渲染图表到HTML文件,存放在程序所在目录下scatter.render("EffectScatter.html")
图像效果如下:
8. 词云图 WordCloud模块
绘制词云图使用的是WordCloud模块,
主要的方法有add()方法。
add()方法的主要参数如下:
add()方法主要的参数有
准备一个txt文件(001.txt),文本内容以《兰亭集序》为例:
永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭,修禊事也。群贤毕至,少长咸集。此地有崇山峻岭,茂林修竹,又有清流激湍,映带左右,引以为流觞曲水,列坐其次。虽无丝竹管弦之盛,一觞一咏,亦足以畅叙幽情。
是日也,天朗气清,惠风和畅。仰观宇宙之大,俯察品类之盛,所以游目骋怀,足以极视听之娱,信可乐也。
夫人之相与,俯仰一世。或取诸怀抱,悟言一室之内;或因寄所托,放浪形骸之外。虽趣舍万殊,静躁不同,当其欣于所遇,暂得于己,快然自足,不知老之将至;及其所之既倦,情随事迁,感慨系之矣。向之所欣,俯仰之间,已为陈迹,犹不能不以之兴怀,况修短随化,终期于尽!古人云:“死生亦大矣。”岂不痛哉!
每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。固知一死生为虚诞,齐彭殇为妄作。后之视今,亦犹今之视昔,悲夫!故列叙时人,录其所述,虽世殊事异,所以兴怀,其致一也。后之览者,亦将有感于斯文。
代码示例如下:
from pyecharts.charts import WordCloudfrom jieba import analyse# 基于TextRank算法从文本中提取关键词textrank = analyse.textranktext = open('001.txt', 'r', encoding='UTF-8').read()keywords = textrank(text, topK=30)list1 = []tup1 = ()# 关键词列表for keyword, weight in textrank(text, topK=30, withWeight=True): # print('%s %s' % (keyword, weight)) tup1 = (keyword, weight) # 关键词权重 list1.append(tup1) # 添加到列表中# 绘制词云图mywordcloud = WordCloud()mywordcloud.add('', list1, word_size_range=[20, 100])mywordcloud.render('wordclound.html')
词云图效果如下:
9. 热力图 HeatMap模块
绘制热力图使用的是HeatMap模块。
下边以双色球案例为例,数据使用生成的随机数,绘制出热力图:
import pyecharts.options as optsfrom pyecharts.charts import HeatMapimport pandas as pdimport numpy as np# 创建一个33行7列的DataFrame,数据使用随机数生成。每个数据表示该位置上该数字出现的次数s1 = np.random.randint(0, 200, 33)s2 = np.random.randint(0, 200, 33)s3 = np.random.randint(0, 200, 33)s4 = np.random.randint(0, 200, 33)s5 = np.random.randint(0, 200, 33)s6 = np.random.randint(0, 200, 33)s7 = np.random.randint(0, 200, 33)data = pd.DataFrame( {'位置一': s1, '位置二': s2, '位置三': s3, '位置四': s4, '位置五': s5, '位置六': s6, '位置七': s7 }, index=range(1, 34))# 数据转换为HeatMap支持的列表格式value1 = []for i in range(7): for j in range(33): value1.append([i, j, int(data.iloc[j, i])])# 绘制热力图x = data.columnsheatmap=HeatMap(init_opts=opts.InitOpts(width='600px' ,height='650px'))heatmap.add_xaxis(x)heatmap.add_yaxis("aa", list(data.index), value=value1, # y轴数据 # y轴标签 label_opts=opts.LabelOpts(is_show=True, color='white', position="center"))heatmap.set_global_opts(title_opts=opts.TitleOpts(title="双色球中奖号码热力图", pos_left="center"), legend_opts=opts.LegendOpts(is_show=False), # 不显示图例 # 坐标轴配置项 xaxis_opts=opts.AxisOpts( type_="category", # 类目轴 # 分隔区域配置项 splitarea_opts=opts.SplitAreaOpts( is_show=True, # 区域填充样式 areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), # 坐标轴配置项 yaxis_opts=opts.AxisOpts( type_="category", # 类目轴 # 分隔区域配置项 splitarea_opts=opts.SplitAreaOpts( is_show=True, # 区域填充样式 areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), # 视觉映射配置项 visualmap_opts=opts.VisualMapOpts(is_piecewise=True, # 分段显示 min_=1, max_=170, # 最小值、最大值 orient='horizontal', # 水平方向 pos_left="center") # 居中 )heatmap.render("heatmap.html")
热力图效果如下:
10. 水球图 Liquid模块
绘制水球图使用的是Liquid模块。
from pyecharts.charts import Liquidliquid = Liquid()liquid.add('', [0.39])liquid.render("liquid.html")
水球图效果如下:
11. 日历图 Calendar模块
绘制日历图使用的是Calendar模块
主要使用的方法是add()方法
import pandas as pdimport numpy as npfrom pyecharts import options as optsfrom pyecharts.charts import Calendardata = list(np.random.random(30))# 求最大值和最小值mymax = round(max(data), 2)mymin = round(min(data), 2)# 生成日期index = pd.date_range('20220401', '20220430')# 合并列表data_list = list(zip(index, data))# 生成日历图calendar = Calendar()calendar.add("", data_list, calendar_opts=opts.CalendarOpts(range_=['2022-04-01', '2022-04-30']))calendar.set_global_opts( title_opts=opts.TitleOpts(title="2022年4月某指标情况", pos_left='center'), visualmap_opts=opts.VisualMapOpts( max_=mymax, min_=mymin+0.1, orient="horizontal", is_piecewise=True, pos_top="230px", pos_left="70px", ), )calendar.render("calendar.html")
日历图效果如下:
以上就是关于“Python数据可视化之Pyecharts如何使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341