python雷达和柱形图_Python Pygal常见数据图(折线图、柱状图、饼图、点图、仪表图和雷达图)详解...
Pygal 同樣支持各種不同的數(shù)據(jù)圖,比如餅圖、折線圖等。Pygal 的設(shè)計很好,不管是創(chuàng)建哪種數(shù)據(jù)圖,Pygal 的創(chuàng)建方式基本是一樣的,都是先創(chuàng)建對應(yīng)的數(shù)據(jù)圖對象,然后添加數(shù)據(jù),最后對數(shù)據(jù)圖進行配置。因此,使用 Pygal 生成數(shù)據(jù)圖是比較簡單的。
折線圖
折線圖與柱狀圖很像,它們只是表現(xiàn)數(shù)據(jù)的方式不同,柱狀圖使用條柱代表數(shù)據(jù),而折線圖則使用折線點來代表數(shù)據(jù)。因此,生成折線圖的方式與生成柱狀圖的方式基本相同。
使用 pygal.Line 類來表示折線圖,程序創(chuàng)建 pygal.Line 對象就是創(chuàng)建折線圖。下面程序示范了利用折線圖來展示兩套教程銷量統(tǒng)計數(shù)據(jù)的方法。
import pygal x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # 構(gòu)造數(shù)據(jù) y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 創(chuàng)建pygal.Line對象(折線圖) line = pygal.Line() # 添加兩組代表折線的數(shù)據(jù) line.add('C語言教程', y_data) line.add('Python教程', y_data2) # 設(shè)置X軸的刻度值 line.x_labels = x_data # 重新設(shè)置Y軸的刻度值 line.y_labels = [20000, 40000, 60000, 80000, 100000] line.title = '編程教程的歷年銷量' # 設(shè)置X、Y軸的標題 line.x_title = '年份' line.y_title = '銷量' # 設(shè)置將圖例放在底部 line.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 line.render_to_file('fk_books.svg')
上面程序中的第 8 行代碼創(chuàng)建了 pygal.Line 對象,該對象代表折線圖。接下來程序調(diào)用 pygal.Line 對象的 add() 方法添加統(tǒng)計數(shù)據(jù),然后對數(shù)據(jù)圖進行配置。
運行上面程序,將會生成如圖 1 所示的折線圖。
圖 1 折線圖
水平柱狀圖和水平折線圖
使用 pygal.HorizontalBar 類來表示水平柱狀圖。使用 pygal.HorizontalBar 生成水平柱狀圖的步驟與創(chuàng)建普通柱狀圖的步驟基本相同。下面程序示范了使用 pygal.HorizontalBar 生成水平柱狀圖來展示兩套教程歷年銷量統(tǒng)計數(shù)據(jù)的方法:
import pygal x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # 構(gòu)造數(shù)據(jù) y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 創(chuàng)建pygal.HorizontalBar對象(水平柱狀圖) horizontal_bar = pygal.HorizontalBar() # 添加兩組數(shù)據(jù) horizontal_bar.add('C語言教程', y_data) horizontal_bar.add('Python教程', y_data2) # 設(shè)置Y軸(確實如此)的刻度值 horizontal_bar.x_labels = x_data # 重新設(shè)置X軸(確實如此)的刻度值 horizontal_bar.y_labels = [20000, 40000, 60000, 80000, 100000] horizontal_bar.title = '編程教程的歷年銷量' # 設(shè)置X、Y軸的標題 horizontal_bar.x_title = '銷量' horizontal_bar.y_title = '年份' # 設(shè)置將圖例放在底部 horizontal_bar.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 horizontal_bar.render_to_file('fk_books.svg')
上面程序中第 8 行代碼創(chuàng)建 pygal.HorizontalBar 對象作為水平柱狀圖,這與前面創(chuàng)建普通柱狀圖并無差別。在設(shè)置 pygal.HorizontalBar 對象時有一點需要注意,x_labels 屬性用于設(shè)置 Y 軸的刻度值,而 y_labels 屬性用于設(shè)置 X 軸的刻度值。
運行上面程序,將會生成如圖 2 所示的水平柱狀圖。
圖 2 水平柱狀圖
與水平柱狀圖類似的還有水平折線圖,水平折線圖使用 pygal.HorizontalLine 類來表示,水平折線圖的 X 軸刻度值同樣使用 y_labels 屬性來設(shè)置,而 Y 軸刻度值才使用 x_labels 屬性來設(shè)置。
例如如下程序所示:
import pygal x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # 構(gòu)造數(shù)據(jù) y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 創(chuàng)建pygal.HorizontalLine對象(水平折線圖) horizontal_line = pygal.HorizontalLine() # 添加兩組代表折線的數(shù)據(jù) horizontal_line.add('C語言教程', y_data) horizontal_line.add('Python教程', y_data2) # 設(shè)置Y軸(確實如此)的刻度值 horizontal_line.x_labels = x_data # 重新設(shè)置X軸(確實如此)的刻度值 horizontal_line.y_labels = [20000, 40000, 60000, 80000, 100000] horizontal_line.title = '編程教程的歷年銷量' # 設(shè)置X、Y軸的標題 horizontal_line.x_title = '銷量' horizontal_line.y_title = '年份' # 設(shè)置將圖例放在底部 horizontal_line.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 horizontal_line.render_to_file('fk_books.svg')
疊加柱狀圖和疊加折線圖
有些時候,客戶重點關(guān)心的不是兩個產(chǎn)品在同一年的銷量對比(應(yīng)該使用普通柱狀圖),而是兩個產(chǎn)品的累計銷量,此時應(yīng)該使用疊加柱狀圖或疊加折線圖。
對于疊加柱狀圖而言,代表第二組數(shù)據(jù)的條性會疊加在代表第一組數(shù)據(jù)的條柱上,這樣可以更方便地看到兩組數(shù)據(jù)的累加結(jié)果。疊加柱狀圖使用 pygal.StackedBar 類來表示,程序使用 pygal.StackedBar 創(chuàng)建疊加柱狀圖的步驟與創(chuàng)建普通柱狀圖的步驟基本相同。
下面程序示范了使用 pygal.StackedBar 創(chuàng)建疊加柱狀圖來展示兩種圖書銷量數(shù)據(jù)匯總的方法:
import pygal x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # 構(gòu)造數(shù)據(jù) y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 創(chuàng)建pygal.StackedBar對象(疊加柱狀圖) stacked_bar = pygal.StackedBar() # 添加兩組數(shù)據(jù) stacked_bar.add('C語言教程', y_data) stacked_bar.add('Python教程', y_data2) # 設(shè)置X軸的刻度值 stacked_bar.x_labels = x_data # 重新設(shè)置Y軸的刻度值 stacked_bar.y_labels = [20000, 40000, 60000, 80000, 100000] stacked_bar.title = '編程教程的歷年銷量' # 設(shè)置X、Y軸的標題 stacked_bar.x_title = '銷量' stacked_bar.y_title = '年份' # 設(shè)置將圖例放在底部 stacked_bar.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 stacked_bar.render_to_file('fk_books.svg')
上面程序中,第 8 行代碼創(chuàng)建了 pygal.StackedBar 對象,該對象就代表一個疊加柱狀圖。接下來程序同樣先為疊加柱狀圖添加數(shù)據(jù),然后配置疊加柱狀圖。
運行上面程序,將會生成如圖 3 所示的疊加柱狀圖。
圖 3 疊加柱狀圖
從圖 3 可以看到,代表第二組數(shù)據(jù)的條柱疊加在代表第一組數(shù)據(jù)的條柱上。
與疊加柱狀圖類似的還有疊加折線圖,疊加折線圖使用 pygal.StackedLine 類來表示,疊加折線圖的第二組折線的數(shù)據(jù)點同樣疊加在第一組折線的數(shù)據(jù)點上。
關(guān)于疊加折線圖,可參考如下程序:
import pygal x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # 構(gòu)造數(shù)據(jù) y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 創(chuàng)建pygal.StackedBar對象(疊加折線圖) stacked_line = pygal.StackedLine() # 添加兩組數(shù)據(jù) stacked_line.add('C語言教程', y_data) stacked_line.add('Python教程', y_data2) # 設(shè)置X軸的刻度值 stacked_line.x_labels = x_data # 重新設(shè)置Y軸的刻度值 stacked_line.y_labels = [20000, 40000, 60000, 80000, 100000] stacked_line.title = '編程教程的歷年銷量' # 設(shè)置X、Y軸的標題 stacked_line.x_title = '銷量' stacked_line.y_title = '年份' # 設(shè)置將圖例放在底部 stacked_line.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 stacked_line.render_to_file('fk_books.svg')
對應(yīng)的是, 如果客戶需要讓疊加柱狀圖和疊加折線圖以水平方式顯示,則 Pygal 提供了 pygal.HorizontalStackedBar 和 pygal.HorizontalStackedLine 類來生成水平疊加柱狀圖和水平疊加折線圖。
餅圖
Pygal 提供了 pygal.Pie 類來支持餅圖,程序在創(chuàng)建 pygal.Pie 對象之后,同樣需要調(diào)用 add() 方法來添加統(tǒng)計數(shù)據(jù)。
pygal.Pie 對象支持如下兩個特有的屬性:
inner_radius:設(shè)置餅圖內(nèi)圈的半徑。通過設(shè)置該屬性可實現(xiàn)環(huán)形數(shù)據(jù)圖。
half_pie:將該屬性設(shè)置為True,可實現(xiàn)半圓的餅圖。
下面程序示范了使用餅圖來展示 2018 年 8 月編程語言的統(tǒng)計數(shù)據(jù):
import pygal # 準備數(shù)據(jù) data = [0.16881, 0.14966, 0.07471, 0.06992, 0.04762, 0.03541, 0.02925, 0.02411, 0.02316, 0.01409, 0.36326] # 準備標簽 labels = ['Java', 'C', 'C++', 'Python', 'Visual Basic .NET', 'C#', 'PHP', 'JavaScript', 'SQL', 'Assembly langugage', '其他'] # 創(chuàng)建pygal.Pie對象(餅圖) pie = pygal.Pie() # 采用循環(huán)為餅圖添加數(shù)據(jù) for i, per in enumerate(data): pie.add(labels[i], per) pie.title = '2018年8月編程語言' # 設(shè)置將圖例放在底部 pie.legend_at_bottom = True # 設(shè)置內(nèi)圈的半徑長度 pie.inner_radius = 0.4 # 創(chuàng)建半圓數(shù)據(jù)圖 pie.half_pie = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 pie.render_to_file('language_percent.svg')
上面程序中,第 11 行代碼創(chuàng)建了一個 pygal.Pie 對象,該對象就表示一個餅圖。接下來程序使用循環(huán)為餅圖添加了數(shù)據(jù)。程序中第 19 行代碼設(shè)置 pygal.Pie 的 inner_radius 半徑為 0.4,這表明將該餅圖設(shè)為空心環(huán);第 21 行代碼設(shè)置 pygal.Pie 的 half_pie 為 True,這表明將該餅圖設(shè)為半圓。
如果將上面程序中第 19、21 兩行代碼注釋掉,運行該程序,將會生成如圖 4 所示的傳統(tǒng)餅圖。
圖 4 傳統(tǒng)餅圖圖
如果取消這兩行代碼的注釋,程序?qū)煽招牡陌雸A餅圖,如圖 5 所示。
圖 5 空心的半圓餅圖
點圖
與柱狀圖使用條柱高度來代表數(shù)值的大小不同,點圖使用點(圓)的大小來表示數(shù)值的大小。Pygal 使用 pygal.Dot 類表示點圖,創(chuàng)建點圖的方式與創(chuàng)建柱狀圖的方式基本相同。
下面程序示范了使用點圖來展示圖書銷量的統(tǒng)計數(shù)據(jù):
import pygal x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # 構(gòu)造數(shù)據(jù) y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 創(chuàng)建pygal.Dot對象(點圖) dot = pygal.Dot() dot.dots_size = 5 # 添加兩組數(shù)據(jù) dot.add('C語言教程', y_data) dot.add('Python教程', y_data2) # 設(shè)置X軸的刻度值 dot.x_labels = x_data # 重新設(shè)置Y軸的刻度值 dot.y_labels = ['C語言教程', 'Python教程'] # 設(shè)置Y軸刻度值的旋轉(zhuǎn)角度 dot.y_label_rotation = 45 dot.title = '編程教程的歷年銷量' # 設(shè)置X軸的標題 dot.x_title = '年份' # 設(shè)置將圖例放在底部 dot.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 dot.render_to_file('fk_books.svg')
上面程序中,第 8 行代碼創(chuàng)建了 pygal.Dot 對象,該對象代表點圖。在創(chuàng)建了 pygal.Dot 對象之后,程序為該對象添加要展示的數(shù)據(jù),然后配置該點圖。
運行該程序,將會生成如圖 6 所示的點圖。
圖 6 點圖
儀表(Gauge)圖
儀表圖類似于一個儀表盤,在儀表盤內(nèi)使用不同的指針代表不同的數(shù)據(jù)。Pygal 使用 pygal.Gauge 類表示儀表圖。程序在創(chuàng)建 pygal.Gauge 對象之后,為 pygal.Gauge 對象添加數(shù)據(jù)的方式與為 pygal.Pie 對象添加數(shù)據(jù)的方式相似。
pygal.Gauge 對象有一個特別的屬性:range,該屬性用于指定儀表圖的最小值和最大值。
下面程序示范了使用儀表圖來展示各編程語言所占的市場比例:
import pygal # 準備數(shù)據(jù) data = [0.16881, 0.14966, 0.07471, 0.06992, 0.04762, 0.03541, 0.02925, 0.02411, 0.02316, 0.01409, 0.36326] # 準備標簽 labels = ['Java', 'C', 'C++', 'Python', 'Visual Basic .NET', 'C#', 'PHP', 'JavaScript', 'SQL', 'Assembly langugage', '其他'] # 創(chuàng)建pygal.Gauge對象(儀表圖) gauge = pygal.Gauge() gauge.range = [0, 1] # 采用循環(huán)為儀表圖添加數(shù)據(jù) for i, per in enumerate(data): gauge.add(labels[i], per) gauge.title = '2018年8月編程語言' # 設(shè)置將圖例放在底部 gauge.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 gauge.render_to_file('language_percent.svg')
上面程序中第 11 行代碼創(chuàng)建了 pygal.Gauge 對象,接下來第 12 行代碼對該對象的 range 屬性賦值,將該儀表圖的最大值賦值為 1,最小值賦值為 0。
運行該程序,將會生成如圖 7 所示的儀表圖。
圖 7 儀表圖
雷達圖
雷達圖適合用于分析各對象在不同維度的優(yōu)勢和劣勢,通過雷達圖可對比每個對象在不同維度的得分。假如我們從表 8 所示的 5 個方面(平臺健壯性、語法易用性、社區(qū)活躍度、市場份額和未來趨勢)的得分來評價各編程語言的優(yōu)勢。
表 8 編程語言對比
平臺健壯性
語法易用性
社區(qū)活躍度
市場份額
未來趨勢
Java
5
4.0
5
5
5
C
4.8
2.8
4.8
4.8
4.9
C++
4.5
2.9
4.6
4.0
4.9
Python
4.0
4.8
4.9
4.0
5
C#
3.0
4.2
2.3
3.5
2
PHP
4.8
4.3
3.9
3.0
4.5
對于表 8 所示的對比數(shù)據(jù),我們可以使用雷達圖來展示各編程語言在不同維度的優(yōu)勢。
import pygal # 準備數(shù)據(jù) data = [[5, 4.0, 5, 5, 5], [4.8, 2.8, 4.8, 4.8, 4.9], [4.5, 2.9, 4.6, 4.0, 4.9], [4.0, 4.8, 4.9, 4.0, 5], [3.0, 4.2, 2.3, 3.5, 2], [4.8, 4.3, 3.9, 3.0, 4.5]] # 準備標簽 labels = ['Java', 'C', 'C++', 'Python', 'C#', 'PHP'] # 創(chuàng)建pygal.Radar對象(雷達圖) rader = pygal.Radar() # 采用循環(huán)為雷達圖添加數(shù)據(jù) for i, per in enumerate(labels): rader.add(labels[i], data[i]) rader.x_labels = ['平臺健壯性', '語法易用性', '社區(qū)活躍度', '市場份額', '未來趨勢'] rader.title = '編程語言對比圖' # 控制各數(shù)據(jù)點的大小 rader.dots_size = 8 # 設(shè)置將圖例放在底部 rader.legend_at_bottom = True # 指定將數(shù)據(jù)圖輸出到SVG文件中 rader.render_to_file('language_compare.svg')
上面程序中第 14 行代碼創(chuàng)建了 pygal.Rader 對象,接下來程序使用循環(huán)為雷達圖添加數(shù)據(jù)。在雷達圖上會顯示各編程語言在不同維度的得分點,程序中第 22 行代碼設(shè)置了得分點的大小。
運行該程序,將會生成如圖 9 所示的雷達圖。
圖 9 雷達圖
總結(jié)
以上是生活随笔為你收集整理的python雷达和柱形图_Python Pygal常见数据图(折线图、柱状图、饼图、点图、仪表图和雷达图)详解...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工行虚拟信用卡没有激活会不会有影响吗
- 下一篇: 华夏喜盈门保险安全吗