config模块配置pygal图该模块包含了BaseConfig CommonConfig Config SerieConfig等配置类

import pygalyear_data = [str(i) for i in range(2011,2020)]java_data = [17.89, 18.29, 20.45, 19.28, 20.35, 21.23, 19.98, 20.24, 19.56]python_data = [4.89, 4.29, 4.45, 5.28, 5.35, 6.23, 6.98, 7.24, 9.56]# 创建图bar = pygal.Bar()bar.title = 'java与Python历年的市场份额'# 添加数据bar.add('java措辞市场份额', java_data)bar.add('Python措辞市场份额', python_data)# 配置数据bar.x_labels = year_databar.x_title = '年份'bar.y_title = '市场份额'# 设置X轴的标签旋转多少度bar.x_label_rotation = 45# 设置将图例放不才面bar.legend_at_bottom = True# 设置四周的页边距,也可利用margin_bottom margin_top margin_right margin_left分别设置bar.margin = 35# 隐蔽Y轴的网格线bar.show_y_guides = False# 显示X轴的网格线bar.show_x_guides = True# 输出到图片bar.render_to_file('language.svg')

柱状

折线图

pythonphp数据分析Python之数据剖析 Bootstrap

第二节:水平柱状图和水平折线图

水平柱状图利用pygal.HorizontalBar类代表x_labels属性用于设置Y轴的刻度值,而y_labels属性才是配置X轴的刻度值水平折线图水平折线图利用pygal.HorizontalLine代表x_labels属性用于设置Y轴的刻度值,而y_labels属性才是配置X轴的刻度值

import pygalyear_data = [str(i) for i in range(2011,2020)]java_data = [17.89, 18.29, 20.45, 19.28, 20.35, 21.23, 19.98, 20.24, 19.56]python_data = [4.89, 4.29, 4.45, 5.28, 5.35, 6.23, 6.98, 7.24, 9.56]'''pygal.Bar代表柱状图pygal.Line代表折线图pygal.HorizontalBar代表水平柱状图pygal.HorizontalLine代表水平折线图# bar = pygal.Bar()# bar = pygal.Line()# bar = pygal.HorizontalBar()'''# 创建图bar = pygal.HorizontalLine()bar.title = 'java与Python历年的市场份额'# 添加数据bar.add('java措辞市场份额', java_data)bar.add('Python措辞市场份额', python_data)# 配置数据'''# 折线图的数据设置内容bar.x_labels = year_databar.x_title = '年份'bar.y_title = '市场份额(百分比)''''# 对付水平柱状图,x_labels 实在是设置Y轴的坐标bar.x_labels = year_databar.y_title = '年份'bar.x_title = '市场份额(百分比)'# 设置X轴的标签旋转多少度bar.x_label_rotation = 45# 设置将图例放不才面bar.legend_at_bottom = True# 设置四周的页边距,也可利用margin_bottom margin_top margin_right margin_left分别设置bar.margin = 35# 隐蔽Y轴的网格线bar.show_y_guides = True# 显示X轴的网格线bar.show_x_guides = True# 输出到图片bar.render_to_file('language.svg')

水平柱状图

水平折线图

第三节:叠加柱状图

和叠加折线图

叠加柱状图利用pygal.StackedBar代表叠加折线图利用pygal.StackedLine代表水平叠加柱状图利用pygal.HorizontalStackedBar代表水平叠加折线图利用pygal.HorizontalStackedLine代表

import pygalimport randomyear_data = [str(i) for i in range(2011,2020)]banana_data = [random.randint(20, 40) 1000 for i in range(1, 10)]apple_data = [random.randint(35, 60) 1000 for i in range(1, 10)]# pygal.StackedBar代表叠加柱状图 pygal.StackedLine代表叠加折线图# graph = pygal.StackedBar()graph = pygal.StackedLine()graph.title = '喷鼻香蕉与苹果历年的销量剖析'# 添加数据graph.add('喷鼻香蕉的历年销量', banana_data)graph.add('苹果的历年销量', apple_data)# 配置数据graph.x_labels = year_datagraph.x_title = '年份'graph.y_title = '销量(吨)'# 设置X轴的标签旋转多少度graph.x_label_rotation = 45# 设置将图例放不才面graph.legend_at_bottom = True# 设置四周的页边距graph.margin = 35# 隐蔽Y轴的网格线graph.show_y_guides = True# 显示X轴的网格线graph.show_x_guides = True# 输出到图片graph.render_to_file('fruit.svg')

叠加柱状图

叠加折线图

第四节:饼图和点图

饼图饼图用于各成员所占的份额可支持传统的饼图、也可做成空心的饼图、也可做成半圆饼图等

import pygal# 2018年8月编程措辞的市场份额data = {'Java': 0.16881, 'C': 0.14996, 'C++': 0.07471, 'Python': 0.06992, 'VB.net': 0.04762, 'C#': 0.03541, 'PHP': 0.02925, 'JavaScript': 0.02411, 'SQL': 0.02316, 'Assembly languagage': 0.01409, '其他': 0.36326} # 创建饼图 pygal.Pie()graph = pygal.Pie()for k in data.keys(): graph.add(k, data[k])graph.title = '2018年8月编程措辞的市场份额'graph.legend_at_bottom = True# 空心饼图graph.inner_radius = 0.8# 半圆饼图graph.half_pie = Truegraph.reader_to_file('language.svg')

饼图

环形饼图

半圆饼图

点图点图利用点的大小来表示数值的大小pygal利用pygal.Dot类代表点图

import pygalimport randomyear_data = [str(i) for i in range(2011,2020)]banana_data = [random.randint(20, 40) 1000 for i in range(1, 10)]apple_data = [random.randint(35, 60) 1000 for i in range(1, 10)]# pygal.Dot代表点图graph = pygal.Dot()graph.title = '喷鼻香蕉与苹果历年的销量剖析'# 添加数据graph.add('喷鼻香蕉的历年销量', banana_data)graph.add('苹果的历年销量', apple_data)# 配置数据graph.x_labels = year_datagraph.x_title = '年份'# 设置X轴的标签旋转多少度graph.x_label_rotation = 45# 设置将图例放不才面graph.legend_at_bottom = True# 设置四周的页边距graph.margin = 35# 隐蔽Y轴的网格线graph.show_y_guides = True# 显示X轴的网格线graph.show_x_guides = True# 输出到图片graph.render_to_file('fruit.svg')

点图

第五节:案例实操-利用Pygal剖析景象数据

下载、提取数据利用urllib.request向m.tianqi.com发送要求,获取该网站的相应再利用Python的re模块来解析做事器相应,从中提取景象数据

import urllib.request, reimport datetimeimport pygaldef get_html(city, year, month): url = 'https://m.tianqi.com/lishi/%s/%s%s.html' % (city, year, month) request = urllib.request.Requst(url) # 设置User-Agent头,避免产生403缺点 request.add_header('User-Agent', 'Mozilla/5.0') return urllib.request.urlopen(request).read().decode('UTF-8')# print(get_html('guangzhou', '2018', '01l'))dates, highs, lows = [], [], []city = 'guangzhou'year = '2018'month = ['%02d' % i for i in range(1, 13)]# 定义一个开始的日期,用于判断数据是否短缺某一天prev_day = datetime.datetime(2017, 12, 31)for month in months: # 下载网页源码 html = get_html(city, year, month) # 将网页源代码的空格去掉 nospce_test = ''.join(html.split()) # 定义获取全部景象数据的div元素所对应的正则表达式 pattern = re.compile('<divclass="weatherbox">(.?)</div><divclass="clearline1">') div_list = re.finall(pattern, nospce_test) # 定义包含逐日景象对应的dl元素所对应的正则表达式 pattern1 = re.compile('<dlclass="table_day15">(.?)</dl>') dls = re.findall(pattern1, div_list[0]) # 再次遍历dls去获取每天的数据 for dl in dls: # 日期对应正则表达式 date_pattern = re.compile('<ddclass="date">(.?)</dd>') date_dd = re.finall(date_pattern , dl) # 天生日期格式字符串 d_str = year + "/" + date_dd[0][0:5] # 气温信息对应的正则表达式 temp_pattern = re.compile('<ddclass="txt2">(.?)</dd>') temp_dd = re.finall(temp_pattern ,dl) # 最低气温信息对应的正则表达式 low_pattern = re.compile('^(.?)~') low_li = re.finall(low_pattern , temp_dd[0]) # 最高气温信息对应的正则表达式 high_pattern = re.compile('<b>(.?)</b>') high_li = re.finall(high_pattern , temp_dd[0]) try: cur_day = datetime.datetime.strptime(d_str, '%Y/%m/%d') # 得到最低气温和最高气温 low = int(low_li[0]) high= int(high_li[0]) except ValueError: print('cur_day', '温度数据有错') else: # 数据洗濯,判断是否差某一天 diff = cur_day - prev_day # 如果两个日期之间差值不是一天,解释数据丢失了 if diff != datetime.timedelta(days = 1): print('在%s之前丢失了%d天的数据' % (d_str, diff.days - 1)) dates.append(d_str) lows.append(low) highs.append(high) prev_day = cur_day# 创建图bar = pygal.Line()bar.title = '广州%s年的气温剖析' % year# 添加数据bar.add('最低气温', lows)bar.add('最高气温', highs)# 配置数据bar.x_labels = datas# 设置X轴的主刻度bar.x_labels_major = dates[::30]# 设置不显示X轴上的小刻度(避免密密麻麻的情形)bar.show_minor_x_labels = Falsebar.x_title = '日期'bar.y_title = '气温(摄氏度)'# 设置X轴的标签旋转多少度bar.x_label_rotation = 45# 设置将图例放不才面bar.legend_at_bottom = True# 隐蔽Y轴的网格线bar.show_y_guides = True# 显示X轴的网格线bar.show_x_guides = False# 输出到图片bar.render_to_file('temp.svg')

景象剖析图