pyecharts可視化圖表組合組件_Grid:打造專業數據儀表盤
目錄
- pyecharts可視化圖表組合組件_Grid:打造專業數據儀表盤
- 引言
- 圖表1:Grid-Overlap-多X/Y軸示例
- 代碼解析
- 1. 圖表創建
- 2. 多軸配置
- 3. 圖表重疊
- 4. Grid布局
- 效果與應用
- 圖表2:Grid-水平布局示例
- 代碼解析
- 1. 獨立圖表創建
- 2. 水平布局配置
- 3. 標題與圖例位置
- 4. 簡潔的代碼結構
- 效果與應用
- 效果與應用
- 圖表3:Grid-多Y軸示例
- 代碼解析
- 1. 數據復用
- 2. 多Y軸配置
- 3. 簡化的圖表結構
- 4. 更緊湊的布局
- 效果與應用
- 圖表4:Grid-垂直布局示例
- 代碼解析
- 1. 獨立圖表創建
- 2. 垂直布局配置
- 3. 標題與圖例位置
- 4. 簡潔的代碼結構
- 效果與應用
- 圖表5:Grid-地理坐標與柱狀圖組合示例
- 代碼解析
- 1. 多類型圖表組合
- 2. 復雜布局配置
- 3. 數據處理技巧
- 4. 圖例與視覺配置
- 效果與應用
- Grid組件使用總結
引言
在數據可視化領域,如何將多個圖表有機地組合在一起,形成一個直觀、專業的數據儀表盤,是一個常見的挑戰。pyecharts庫中的Grid組件為我們提供了一個強大的解決方案。通過Grid組件,我們可以靈活地排列多個圖表,實現復雜的布局設計,打造出專業級的數據可視化儀表盤。
本文將通過五個實用示例,詳細介紹Grid組件的各種用法,從基礎的多軸配置到復雜的圖表組合,再到靈活的布局設計。每個示例都包含完整的Python代碼、詳細的代碼解析和實際應用場景說明,幫助你全面掌握Grid組件的使用技巧,提升數據可視化水平。
讓我們從第一個實戰案例開始,學習如何創建包含多X/Y軸的Grid圖表。
圖表1:Grid-Overlap-多X/Y軸示例
這個示例展示了如何在Grid組件中組合柱狀圖和折線圖,并配置多個X/Y軸來展示多維度數據。這種圖表特別適合展示相關性數據,比如氣候變化中的溫度、降水量和蒸發量之間的關系。
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line # 創建第一個柱狀圖
bar = ( Bar() .add_xaxis(["{}月".format(i) for i in range(1, 13)]) .add_yaxis( "蒸發量", [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], yaxis_index=0, color="#d14a61", ) .add_yaxis( "降水量", [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], yaxis_index=1, color="#5793f3", ) .extend_axis( yaxis=opts.AxisOpts( name="蒸發量", type_="value", min_=0, max_=250, position="right", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#d14a61") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ) ) .extend_axis( yaxis=opts.AxisOpts( type_="value", name="溫度", min_=0, max_=25, position="left", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#675bba") ), axislabel_opts=opts.LabelOpts(formatter="{value} °C"), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1) ), ) ) .set_global_opts( yaxis_opts=opts.AxisOpts( name="降水量", min_=0, max_=250, position="right", offset=80, axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#5793f3") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ), title_opts=opts.TitleOpts(title="Grid-Overlap-多 X/Y 軸示例"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), legend_opts=opts.LegendOpts(pos_left="25%"), )
) # 創建第一個折線圖
line = ( Line() .add_xaxis(["{}月".format(i) for i in range(1, 13)]) .add_yaxis( "平均溫度", [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2], yaxis_index=2, color="#675bba", label_opts=opts.LabelOpts(is_show=False), )
) # 創建第二個柱狀圖
bar1 = ( Bar() .add_xaxis(["{}月".format(i) for i in range(1, 13)]) .add_yaxis( "蒸發量 1", [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], color="#d14a61", xaxis_index=1, yaxis_index=3, ) .add_yaxis( "降水量 2", [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], color="#5793f3", xaxis_index=1, yaxis_index=4, ) .extend_axis( yaxis=opts.AxisOpts( name="蒸發量", type_="value", min_=0, max_=250, position="right", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#d14a61") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ) ) .extend_axis( yaxis=opts.AxisOpts( type_="value", name="溫度", min_=0, max_=25, position="left", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#675bba") ), axislabel_opts=opts.LabelOpts(formatter="{value} °C"), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1) ), ) ) .set_global_opts( xaxis_opts=opts.AxisOpts(grid_index=1), yaxis_opts=opts.AxisOpts( name="降水量", min_=0, max_=250, position="right", offset=80, axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#5793f3") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), legend_opts=opts.LegendOpts(pos_left="65%"), )
) # 創建第二個折線圖
line1 = ( Line() .add_xaxis(["{}月".format(i) for i in range(1, 13)]) .add_yaxis( "平均溫度 1", [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2], color="#675bba", label_opts=opts.LabelOpts(is_show=False), xaxis_index=1, yaxis_index=5, )
) # 重疊圖表
overlap_1 = bar.overlap(line)
overlap_2 = bar1.overlap(line1) # 創建Grid布局
grid = ( Grid(init_opts=opts.InitOpts(width="1200px", height="800px")) .add( overlap_1, grid_opts=opts.GridOpts(pos_right="58%"), is_control_axis_index=True ) .add(overlap_2, grid_opts=opts.GridOpts(pos_left="58%"), is_control_axis_index=True) #.render("grid_overlap_multi_xy_axis.html")
)
grid.render_notebook()
代碼解析
這個示例展示了Grid組件的高級用法,讓我們逐步分析其核心部分:
1. 圖表創建
代碼中創建了四個主要圖表對象:
bar
: 左側的柱狀圖,展示蒸發量和降水量line
: 左側的折線圖,展示平均溫度bar1
: 右側的柱狀圖,展示另一組蒸發量和降水量數據line1
: 右側的折線圖,展示另一組平均溫度數據
2. 多軸配置
這個示例的關鍵點是使用了多個X/Y軸來展示不同維度的數據:
- 通過
extend_axis
方法添加了額外的Y軸 - 使用
yaxis_index
和xaxis_index
參數指定數據系列使用的軸 - 對每個軸設置了不同的顏色、標簽格式和位置
3. 圖表重疊
使用overlap
方法將折線圖重疊在柱狀圖上:
overlap_1 = bar.overlap(line)
: 將溫度折線圖重疊在左側柱狀圖上overlap_2 = bar1.overlap(line1)
: 將溫度折線圖重疊在右側柱狀圖上
4. Grid布局
最后,使用Grid組件將兩個重疊圖表放置在同一畫布上:
pos_right="58%"
: 左側圖表占據畫布的42%寬度pos_left="58%"
: 右側圖表占據畫布的42%寬度is_control_axis_index=True
: 允許Grid控制軸索引
效果與應用
核心優勢:這種組合方式可以在一個視圖中同時展示空間分布數據和具體分類數據,便于理解區域差異與具體數值的關系。地理坐標圖提供了宏觀視角,而柱狀圖則展示了詳細對比。
適用場景:
- 區域銷售數據展示
- 人口分布與經濟指標對比
- 資源分布與利用效率分析
- 任何需要結合空間和分類數據的場景
使用技巧:調整pos_top
、pos_right
和pos_left
參數時,需要考慮不同圖表的大小和比例,確保布局平衡。對于地理坐標圖,可以通過maptype
參數切換不同的地圖級別(如國家、省份、城市)。
圖表2:Grid-水平布局示例
這個示例展示了如何在Grid組件中實現水平布局,將圖表左右排列。這種布局方式特別適合展示兩組并列的數據,便于橫向對比分析。
from pyecharts import options as opts
from pyecharts.charts import Grid, Line, Scatter
from pyecharts.faker import Faker scatter = (Scatter().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Scatter"),legend_opts=opts.LegendOpts(pos_left="20%"),)
)
line = (Line().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Line", pos_right="5%"),legend_opts=opts.LegendOpts(pos_right="20%"),)
)grid = (Grid().add(scatter, grid_opts=opts.GridOpts(pos_left="55%")).add(line, grid_opts=opts.GridOpts(pos_right="55%"))#.render("grid_horizontal.html")
)
grid.render_notebook()
代碼解析
這個示例展示了Grid組件的水平布局用法,讓我們分析其核心特點:
1. 獨立圖表創建
代碼中創建了兩個獨立的圖表對象:
scatter
: 散點圖,展示商家A和商家B的數據分布line
: 折線圖,展示相同商家的數據趨勢
2. 水平布局配置
Grid的水平布局通過以下參數實現:
pos_left="55%"
: 散點圖占據畫布左側55%的空間pos_right="55%"
: 折線圖占據畫布右側45%的空間- 這種配置實現了圖表的左右排列,便于橫向對比
3. 標題與圖例位置
為了適應水平布局,兩個圖表的標題和圖例位置分別進行了調整:
- 散點圖:標題居中,圖例位于左側20%
- 折線圖:標題位于右側5%,圖例位于右側20%
4. 簡潔的代碼結構
這個示例的代碼結構簡潔明了,適合理解Grid的水平布局原理。通過Faker模塊生成模擬數據,簡化了代碼示例。
效果與應用
核心優勢:水平布局使圖表在視覺上形成橫向對比,特別適合展示兩組并列的數據。這種布局方式充分利用了畫布的水平空間,避免了垂直布局可能產生的過長頁面。
適用場景:
- 數據分布與趨勢對比
- 不同算法或模型的結果對比
- 任何需要左右對比的數據展示場景
使用技巧:調整pos_left
和pos_right
參數時,確保兩個圖表之間留出足夠的空間,避免標題和圖例相互重疊。對于復雜圖表,可以結合pos_top
和pos_bottom
參數進一步優化布局。
效果與應用
核心優勢:這種多圖表組合方式可以在一個視圖中展示多個相關數據集,便于進行對比分析。多軸設計解決了不同量級數據展示的問題。
適用場景:
- 氣象數據展示(溫度、降水量、蒸發量等)
- 經濟指標分析(GDP、CPI、PMI等)
- 銷售數據對比(不同產品、不同地區)
- 環境監測數據儀表盤
使用技巧:確保不同圖表之間有明確的視覺區分(如顏色、線型),同時保持整體風格的一致性。對于多軸圖表,清晰的標簽和圖例至關重要。
圖表3:Grid-多Y軸示例
這個示例展示了如何在Grid組件中配置多個Y軸,實現不同量級數據的同時展示。通過這種方式,我們可以在一個圖表中對比蒸發量、降水量和溫度這三種不同單位的數據。
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line x_data = ["{}月".format(i) for i in range(1, 13)]
bar = ( Bar() .add_xaxis(x_data) .add_yaxis( "蒸發量", [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], yaxis_index=0, color="#d14a61", ) .add_yaxis( "降水量", [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], yaxis_index=1, color="#5793f3", ) .extend_axis( yaxis=opts.AxisOpts( name="蒸發量", type_="value", min_=0, max_=250, position="right", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#d14a61") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ) ) .extend_axis( yaxis=opts.AxisOpts( type_="value", name="溫度", min_=0, max_=25, position="left", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#675bba") ), axislabel_opts=opts.LabelOpts(formatter="{value} °C"), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1) ), ) ) .set_global_opts( yaxis_opts=opts.AxisOpts( name="降水量", min_=0, max_=250, position="right", offset=80, axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#5793f3") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ), title_opts=opts.TitleOpts(title="Grid-多 Y 軸示例"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), )
) line = ( Line() .add_xaxis(x_data) .add_yaxis( "平均溫度", [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2], yaxis_index=2, color="#675bba", label_opts=opts.LabelOpts(is_show=False), )
) bar.overlap(line)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
#grid.render("grid_multi_yaxis.html")
grid.render_notebook()
代碼解析
這個示例展示了如何在單個Grid布局中配置多個Y軸,讓我們分析其核心特點:
1. 數據復用
代碼首先定義了x_data
變量存儲月份數據,然后在柱狀圖和折線圖中復用這個變量,提高了代碼的可維護性。
2. 多Y軸配置
與圖表1類似,這個示例也使用了多個Y軸:
- 右側主Y軸:展示降水量(單位:ml)
- 右側次Y軸:展示蒸發量(單位:ml)
- 左側Y軸:展示溫度(單位:°C)
3. 簡化的圖表結構
相比圖表1,這個示例更加簡潔:
- 只使用了一個柱狀圖(
bar
)和一個折線圖(line
) - 直接使用
bar.overlap(line)
將折線圖重疊在柱狀圖上 - Grid布局也更加簡單,只包含一個圖表區域
4. 更緊湊的布局
通過pos_left="5%", pos_right="20%"
參數設置,使圖表占據了更大的畫布空間,布局更加緊湊。
效果與應用
核心優勢:這種配置方式適合展示多種不同量級的數據,同時保持圖表的簡潔性。溫度數據(°C)和降水量/蒸發量數據(ml)在量級上有很大差異,但通過多Y軸配置可以同時清晰展示。
適用場景:
- 氣象數據展示
- 環境監測指標分析
- 經濟數據對比(如GDP與CPI)
- 任何需要同時展示不同量級數據的場景
使用技巧:對于只有一個主要圖表區域的場景,可以直接使用bar.overlap(line)
簡化代碼,無需創建單獨的overlap對象。
圖表4:Grid-垂直布局示例
這個示例展示了如何在Grid組件中實現垂直布局,將圖表上下排列。這種布局方式特別適合展示具有時間序列關系或需要垂直對比的數據。
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
from pyecharts.faker import Faker bar = (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar"))
)
line = (Line().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),legend_opts=opts.LegendOpts(pos_top="48%"),)
)grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).add(line, grid_opts=opts.GridOpts(pos_top="60%"))#.render("grid_vertical.html")
)
grid.render_notebook()
代碼解析
這個示例展示了Grid組件的垂直布局用法,讓我們分析其核心特點:
1. 獨立圖表創建
代碼中創建了兩個獨立的圖表對象:
bar
: 柱狀圖,展示商家A和商家B的數據對比line
: 折線圖,展示相同商家的數據趨勢
2. 垂直布局配置
Grid的垂直布局通過以下參數實現:
pos_bottom="60%"
: 柱狀圖占據畫布底部40%的空間pos_top="60%"
: 折線圖占據畫布頂部40%的空間- 中間留出20%的空間作為分隔,避免圖表重疊
3. 標題與圖例位置
為了適應垂直布局,折線圖的標題和圖例位置通過pos_top="48%"
參數調整,確保它們顯示在折線圖區域內。
4. 簡潔的代碼結構
相比前兩個示例,這個示例的代碼更加簡潔,適合初學者理解Grid的基本布局原理。
效果與應用
核心優勢:垂直布局使圖表在視覺上更加清晰,特別適合展示兩組相關但不重疊的數據。這種布局方式充分利用了畫布的垂直空間,避免了水平布局可能產生的擁擠感。
適用場景:
- 數據趨勢對比(如銷售額與增長率)
- 時間序列分析(如月度數據與季度匯總)
- 任何需要上下對比的數據展示場景
使用技巧:調整pos_bottom
和pos_top
參數時,確保兩個圖表之間留出足夠的空間,避免標題和圖例相互重疊。對于復雜圖表,可以結合pos_left
和pos_right
參數進一步優化布局。
圖表5:Grid-地理坐標與柱狀圖組合示例
這個示例展示了如何在Grid組件中組合地理坐標圖和柱狀圖,實現空間數據與分類數據的同時展示。這種組合方式特別適合展示區域分布與具體數據的關系,如各省份銷售數據與全國分布的對比。
from pyecharts import options as opts
from pyecharts.charts import Bar, Geo, Grid
from pyecharts.faker import Faker bar = (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(legend_opts=opts.LegendOpts(pos_left="20%"))
)
geo = (Geo().add_schema(maptype="china").add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())]).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(visualmap_opts=opts.VisualMapOpts(),title_opts=opts.TitleOpts(title="Grid-Geo-Bar"),)
)grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_top="50%", pos_right="75%")).add(geo, grid_opts=opts.GridOpts(pos_left="60%"))#.render("grid_geo_bar.html")
)
grid.render_notebook()
代碼解析
這個示例展示了Grid組件如何組合不同類型圖表的用法,讓我們分析其核心特點:
1. 多類型圖表組合
代碼中創建了兩種不同類型的圖表對象:
bar
: 柱狀圖,展示商家A和商家B的分類數據對比geo
: 地理坐標圖,展示全國各省份的數據分布
2. 復雜布局配置
Grid的布局通過以下參數實現了復雜的空間分配:
pos_top="50%", pos_right="75%"
: 柱狀圖占據畫布上方50%、右側25%的空間pos_left="60%"
: 地理坐標圖占據畫布左側60%的空間- 這種配置實現了圖表的交錯布局,充分利用了畫布空間
3. 數據處理技巧
地理坐標圖的數據處理使用了zip
函數將省份和數值配對:
[list(z) for z in zip(Faker.provinces, Faker.values())]
- 這是處理地理數據的常用方式
4. 圖例與視覺配置
- 柱狀圖通過
legend_opts=opts.LegendOpts(pos_left="20%")
調整圖例位置 - 地理坐標圖通過
visualmap_opts=opts.VisualMapOpts()
添加視覺映射,使數據分布更加直觀 - 關閉了地理坐標圖的標簽顯示
label_opts=opts.LabelOpts(is_show=False)
以避免擁擠
效果與應用
核心優勢:這種組合方式可以同時展示空間分布和具體數值,幫助用戶建立數據的空間概念。地理坐標圖提供宏觀視角,柱狀圖提供具體對比,兩者結合使數據分析更加全面。
適用場景:
- 區域銷售數據展示
- 人口分布與經濟指標對比
- 疫情數據可視化
- 資源分布與利用效率分析
使用技巧:在組合不同類型圖表時,注意調整布局參數以避免圖表重疊。對于地理坐標圖,可以通過visualmap_opts
配置顏色漸變,使數據差異更加明顯。同時,合理設置圖例位置,確保圖表信息清晰可讀。
Grid組件使用總結
通過以上五個示例,我們全面了解了pyecharts中Grid組件的各種用法。總結起來,Grid組件具有以下優勢:
- 靈活性強:支持水平、垂直、重疊等多種布局方式,可以根據需求自由組合多個圖表
- 配置簡單:通過簡單的pos_left、pos_right、pos_top、pos_bottom等參數,即可實現復雜的布局
- 兼容性好:可以與pyecharts中的各種圖表類型(如柱狀圖、折線圖、地理坐標圖等)無縫結合
- 可視化效果佳:通過合理的布局設計,可以打造出專業級的數據儀表盤
在使用Grid組件時,建議遵循以下最佳實踐:
- 明確布局需求,選擇合適的布局方式
- 合理設置圖表之間的間距,避免重疊
- 注意標題和圖例的位置,確保信息清晰可讀
- 根據數據特點選擇合適的圖表類型組合
- 保持代碼結構清晰,提高可維護性
請繼續關注本系列教程,獲取更多pyecharts可視化技巧和實戰經驗!
如果你有任何問題或建議,歡迎在評論區留言討論。