時間趨勢類相關的可視化圖像
一、前言
二、地平線圖
1.概念
地平線圖是一種數據可視化技術,以緊湊且分層的格式顯示時間序列數據。它通過將數據劃分為多個區域,并以不同的顏色和填充方式表示數據的正負變化,從而在有限的空間內展示豐富的信息。
2.特點
-
空間效率高:地平線圖通過折疊數據,將多個時間序列壓縮到較小的空間內,適合在有限的顯示區域展示大量數據。
-
信息密度高:盡管空間緊湊,但地平線圖保留了數據的完整信息,用戶可以通過顏色和填充區域輕松識別數據的變化。
-
易于比較:多個時間序列可以并排放置,方便用戶進行橫向比較。
-
視覺吸引力強:通過顏色和填充區域的對比,地平線圖具有較強的視覺吸引力,能夠快速吸引用戶的注意力。
3.應用場景
-
時間序列數據可視化:地平線圖非常適合展示隨時間變化的數據,例如股票價格、氣象數據、網站流量等。
-
多數據集比較:可以同時展示多個時間序列數據,方便用戶進行對比分析。
-
儀表盤設計:在儀表盤中,地平線圖可以作為緊湊的可視化組件,展示關鍵指標的變化。
-
活動高峰時間分析:例如分析一天中不同時間段的運動和休閑活動高峰。
4.代碼實現
1 import numpy as np 2 import matplotlib.pyplot as plt 3 from matplotlib.collections import PolyCollection 4 5 def create_horizon_chart(data, num_bands=3, band_height=0.1, colors=['#6baed6', '#3182bd', '#08519c', '#fee6ce', '#fdae6b', '#e6550d']): 6 """ 7 創建地平線圖 8 :param data: 輸入數據(一維數組) 9 :param num_bands: 分割的區域數量 10 :param band_height: 每個區域的高度 11 :param colors: 顏色列表(正負區域顏色) 12 """ 13 fig, ax = plt.subplots(figsize=(10, 4)) 14 ax.set_xlim(0, len(data)) 15 ax.set_ylim(-1, 1) 16 ax.axis('off') # 關閉坐標軸 17 18 # 計算每個區域的邊界 19 band_boundaries = np.linspace(-1, 1, num_bands * 2 + 1) 20 21 for i in range(num_bands * 2): 22 # 計算當前區域的上下邊界 23 lower_bound = band_boundaries[i] 24 upper_bound = band_boundaries[i + 1] 25 26 # 創建多邊形頂點 27 x = np.arange(len(data)) 28 y1 = np.clip(data, lower_bound, upper_bound) 29 y2 = np.full_like(data, lower_bound) 30 31 # 填充顏色 32 if i < num_bands: 33 color = colors[i] # 正區域 34 else: 35 color = colors[i - num_bands + num_bands] # 負區域 36 37 # 創建多邊形 38 verts = list(zip(x, y1)) + list(zip(x[::-1], y2[::-1])) 39 poly = PolyCollection([verts], facecolors=color, edgecolors='none') 40 ax.add_collection(poly) 41 42 # 添加網格線 43 for i in range(-num_bands, num_bands + 1): 44 ax.axhline(i / num_bands, color='gray', linestyle='--', linewidth=0.5, alpha=0.5) 45 46 plt.show() 47 48 # 示例數據 49 data = np.sin(np.linspace(0, 10, 100)) + np.random.normal(0, 0.1, 100) 50 51 # 創建地平線圖 52 create_horizon_chart(data)

5.相關變體
(1)交互式地平線圖(Interactive Horizon Graph, IHG)
這種變體結合了簡化折線圖(RLC)和地平線圖(HG)的特點,通過交互式技術控制基線位置和值的縮放因子,從而在探索大量時間序列時保持有效性。例如,用戶可以通過平移和縮放來調整基線位置和波段數量,使得在分析多個時間序列時更加靈活。
(2)分組地平線圖(Grouped Horizon Chart)
將數據按照特定的分組進行展示,每組數據有獨立的地平線圖,便于比較不同組之間的趨勢和差異。這種變體適用于需要同時對比多個相關數據集的場景,例如不同地區的經濟指標或不同產品的銷售數據。
(3)帶注釋的地平線圖(Annotated Horizon Chart)
在地平線圖中添加注釋,用于解釋特定數據點或趨勢,幫助用戶更好地理解數據。這種變體特別適用于需要對數據進行詳細解讀的場景,例如在金融分析中對股票價格波動進行注釋。
(4)多層地平線圖(Multi-layered Horizon Chart)
通過增加分層數量來更細致地展示數據的波動。例如,可以將數據分為更多的正負層,以更精確地反映數據的變化。這種變體適用于需要高精度展示數據波動的場景。
三、河流圖
1.概念
河流圖是一種數據可視化圖表,它通過流動的形狀來展示不同類別的數據隨時間的變化情況,有時候也叫做“主題河流圖”。這種圖表是堆疊面積圖的一種變形,它將數據分散到一個變化的中心基準線上,而不是將數據描繪在一個固定的、筆直的軸上。河流圖的特點是將堆疊的區域曲線“平滑”地連接起來,形成一條像河流一樣的曲線。
2.特點
-
流動感:通過流動的形狀展示數據的變化趨勢,具有較高的可讀性,尤其在數據波動變化大時,它的可視化效果更明顯。
-
對比性:在同一時間上可以對不同的數據進行對比,不同顏色的條帶代表不同的數據分類在相同的時間段內的不同數值大小。
-
交互性:適合搭配交互設計來展現,當數據類型較多時,可以通過鼠標的移動突出某個時間點上的詳細數據值。
3.應用場景
-
展示時間序列數據的變化趨勢,比如不同地區的氣溫變化;
-
對比不同數據集的各個類別之間的變化趨勢,比如不同產品的銷售額;
-
展示不同類別在整體中的占比和變化情況,比如不同人群的年齡分布。
-
展示事件發生的時間、熱度等信息,能夠體現事件隨時間演變的過程,主要應用在新聞事件分析中,如金融事件、政治事件等。
4.代碼實現
1 import matplotlib.pyplot as plt 2 import pandas as pd 3 import numpy as np 4 5 plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定中文字體為黑體 6 plt.rcParams['axes.unicode_minus'] = False # 解決負號顯示問題 7 8 # 創建示例數據 9 dates = pd.date_range('20210401', periods=60) 10 data = pd.DataFrame(np.random.randn(60, 3), index=dates, columns=list('ABC')) 11 data = data.cumsum() 12 13 # 繪制河流圖 14 fig, ax = plt.subplots(figsize=(10, 4)) 15 data.plot.area(ax=ax, stacked=False) 16 17 # 設置圖表標題和標簽 18 ax.set_title('河流圖示例') 19 ax.set_xlabel('日期') 20 ax.set_ylabel('值') 21 22 plt.show()

5.相關變體
(1)基本河流圖:展示單一數據集的河流圖。
(2)分組河流圖:將兩組數據并排展示,每組數據都有自己的河流圖。
(3)帶注釋的河流圖:在河流圖上添加注釋,標注特定的數據點或趨勢。
(4)多層河流圖:通過增加分層數量來更細致地展示數據的波動。
四、瀑布圖
1.概念
瀑布圖,也稱為橋圖,是一種特殊的圖表類型,用于展示一系列數據的累積效應。它通過水平條形來表示每個數據點對總體的貢獻,每個條形的起點基于前一個條形的終點,清晰地展示了從初始值到最終值的變化過程,直觀地呈現出數據的增減變化和累積效果。
2.特點
- 清晰展示數據變化:通過連續的條形展示數據的增減變化,能讓觀眾迅速了解每個數據點對整體的影響,以及數據從起始到結束的演變過程。
- 強調累積效果:可以直觀地展示出各個數據點的累積效應,便于分析不同部分對總體的貢獻,以及它們之間的關系。
- 易于理解:其可視化方式簡單易懂,即使對于沒有專業數據分析背景的人,也能輕松理解數據的變化和累積情況。
3.應用場景
4.代碼實現
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 # 數據 5 categories = ['A', 'B', 'C', 'D', 'E'] 6 values = [10, -5, 7, -3, 12] # 正數表示增加,負數表示減少 7 8 # 計算累計值 9 cumulative = np.cumsum(values) 10 11 # 創建圖形 12 fig, ax = plt.subplots() 13 14 # 繪制條形圖 15 bar_colors = ['#76D7C4' if val >= 0 else '#EC7063' for val in values] # 根據正負值設置顏色 16 bars = ax.bar(categories, values, color=bar_colors) 17 18 # 添加累計值的水平線 19 for i, cum in enumerate(cumulative): 20 ax.plot([i - 0.4, i + 0.4], [cum, cum], color='black', linewidth=1) 21 22 # 添加文本標簽 23 for bar, val, cum in zip(bars, values, cumulative): 24 if val >= 0: 25 ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() / 2, f'+{val}', ha='center', va='center') 26 else: 27 ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() / 2, f'{val}', ha='center', va='center') 28 ax.text(bar.get_x() + bar.get_width() / 2, cum, f'{cum}', ha='center', va='bottom') 29 30 # 設置標題和標簽 31 ax.set_title('Waterfall Chart') 32 ax.set_xlabel('Categories') 33 ax.set_ylabel('Values') 34 35 # 顯示圖形 36 plt.show()

5.相關變體
(1)堆積瀑布圖(Stacked Waterfall Chart)
堆積瀑布圖在基本瀑布圖的基礎上,將多個數據系列堆疊在一起,用于展示多個變量對總值的貢獻。 特點:可以同時展示多個數據系列的變化;每個條形圖可以分為多個部分,表示不同變量的貢獻。
(2)百分比瀑布圖(Percentage Waterfall Chart)
百分比瀑布圖將每個條形的高度表示為相對于總值的百分比變化,而不是絕對值變化。這種圖表適合展示比例變化。 特點:每個條形的高度表示百分比變化;適用于展示比例變化,而不是絕對值變化。
(3)帶有閾值的瀑布圖(Waterfall Chart with Threshold)
這種瀑布圖在基本瀑布圖的基礎上,添加了閾值線,用于突出顯示某些關鍵值。 特點:添加水平閾值線,用于標記關鍵值;可以突出顯示超過或低于閾值的部分。
五、燭形圖
1.概念
燭形圖,又稱 K 線圖,是一種廣泛用于金融市場的圖表類型,用于展示價格隨時間的變化。它起源于 17 世紀日本的米市交易,后被引入西方金融市場。每根 "蠟燭" 由實體(body)和影線(wick)組成,實體表示開盤價和收盤價之間的價差,影線則表示最高價和最低價。
2.特點
- 信息豐富:單根 K 線包含四個關鍵價格點(開盤價、收盤價、最高價、最低價)。
- 視覺直觀:通過顏色(通常紅色表示下跌,綠色表示上漲)快速識別價格變動方向。
- 形態多樣:不同的 K 線組合(如十字星、錘子線、吞沒形態)可預測市場趨勢。
- 時間靈活:可應用于不同時間周期(分鐘、小時、日、周、月)。
3.應用場景
- 金融交易:股票、期貨、外匯、加密貨幣等市場的價格分析。
- 技術分析:識別支撐位、阻力位、趨勢反轉和市場情緒。
- 風險管理:通過止損位和止盈位的設置管理交易風險。
- 量化交易:作為算法交易策略的基礎數據可視化工具。
4.代碼實現
1 import plotly.graph_objects as go 2 # 數據 3 data = [ 4 {'date': '2023-01-01', 'open': 100, 'high': 110, 'low': 95, 'close': 105}, 5 {'date': '2023-01-02', 'open': 105, 'high': 115, 'low': 100, 'close': 110}, 6 {'date': '2023-01-03', 'open': 110, 'high': 120, 'low': 105, 'close': 115}, 7 {'date': '2023-01-04', 'open': 115, 'high': 125, 'low': 110, 'close': 120}, 8 {'date': '2023-01-05', 'open': 120, 'high': 130, 'low': 115, 'close': 125} 9 ] 10 11 # 提取數據 12 dates = [d['date'] for d in data] 13 opens = [d['open'] for d in data] 14 highs = [d['high'] for d in data] 15 lows = [d['low'] for d in data] 16 closes = [d['close'] for d in data] 17 18 # 創建燭形圖 19 fig = go.Figure(data=[go.Candlestick( 20 x=dates, 21 open=opens, 22 high=highs, 23 low=lows, 24 close=closes, 25 increasing_line_color='green', # 上漲顏色 26 decreasing_line_color='red' # 下跌顏色 27 )]) 28 29 # 更新布局 30 fig.update_layout( 31 title='Candlestick Chart', 32 xaxis_title='Date', 33 yaxis_title='Price', 34 xaxis_rangeslider_visible=False # 隱藏滑塊 35 ) 36 37 # 顯示圖形 38 fig.show()

5.相關變體
(1)帶有移動平均線的燭形圖
在燭形圖的基礎上添加移動平均線(MA),用于平滑價格數據,幫助識別趨勢。特點:短期移動平均線(如5日均線):快速反映價格的短期波動;長期移動平均線(如20日均線):平滑價格波動,幫助識別長期趨勢;交叉信號:短期均線向上穿過長期均線可能表示買入信號;反之,向下穿過可能表示賣出信號。趨勢確認:移動平均線的方向和斜率可以確認當前的趨勢強度。
(2)帶有成交量的燭形圖
在燭形圖下方添加成交量柱狀圖,用于展示每個時間點的交易活躍程度。特點:成交量柱狀圖:通常顯示在燭形圖下方,用顏色區分上漲和下跌;交易活躍度:成交量的大小可以反映市場的情緒和交易活躍度;結合價格分析:高成交量的上漲或下跌可能表示強烈的市場趨勢;背離信號:價格創新高但成交量未同步增加,可能表示上漲動力減弱。
(3)帶有布林帶的燭形圖
布林帶(Bollinger Bands)是基于標準差的波動范圍指標,通常添加在燭形圖上,用于衡量價格波動的范圍。特點:布林帶:由中軌(移動平均線)、上軌(中軌 + 2倍標準差)和下軌(中軌 - 2倍標準差)組成;波動范圍:布林帶的寬度可以反映市場的波動性;價格位置:價格觸及上軌可能表示超買,觸及下軌可能表示超賣;動態調整:布林帶會隨著價格的波動動態調整,幫助識別市場的變化。
(4)Heikin-Ashi 燭形圖
Heikin-Ashi(平均蠟燭圖)是一種特殊的燭形圖,通過平均化價格數據來平滑價格波動,使趨勢更加明顯。特點:平滑價格:通過計算平均開盤價、收盤價、最高價和最低價來生成蠟燭圖;趨勢識別:白色蠟燭表示上漲趨勢,黑色蠟燭表示下跌趨勢;過濾噪聲:更適合識別長期趨勢,減少短期波動的干擾;視覺清晰:通過平滑處理,使圖表更易于閱讀和分析。
七、總結
| 圖表類型 | 概念 | 特點 | 優點 | 缺點 | 應用場景 |
|---|---|---|---|---|---|
| 地平線圖 | 一種用于展示時間序列數據的可視化方法,通過將數據分割成多個水平條帶,并對每個條帶進行顏色編碼來表示數據的正負變化。 | 數據按時間順序分層顯示,正負變化通過顏色區分,可堆疊顯示多個時間序列。 | 空間效率高,可展示大量數據,易于識別數據的波動和趨勢,適合比較多個時間序列。 | 對初學者來說可能較難理解,顏色編碼需清晰,否則易混淆,不適合展示非時間序列數據。 | 金融市場分析(股票價格波動),氣象數據展示(溫度、降雨量變化),網站流量分析(用戶訪問量變化)。 |
| 河流圖 | 一種展示數據隨時間變化的動態圖表,通常用于展示數據的流向和變化趨勢,數據流的寬度隨時間變化而變化。 | 數據流隨時間動態變化,流的寬度表示數據量,可展示多個數據流的交互。 | 直觀展示數據的流向和變化,適合展示動態變化過程,易于理解數據的增減趨勢。 | 對復雜數據流的展示可能較混亂,不適合展示靜態數據,需要較多空間來展示時間維度。 | 社交網絡分析(信息傳播路徑),人口遷移分析(人口流動趨勢),金流向分析(資金在不同項目間的流動)。 |
| 瀑布圖 | 一種展示數據隨時間或其他序列變化的增減情況的圖表,通過條形圖的上升和下降來表示數據的變化。 | 條形圖表示數據的增減,可展示累計效果,清晰的正負變化表示。 | 直觀展示數據的增減變化,適合分析數據的變化過程,易于理解數據的累計效果。 | 對復雜數據的展示可能較混亂,不適合展示非序列數據,需要清晰的標簽和注釋來增強可讀性。 | 財務分析(收入和支出的變化),項目管理(任務進度的變化),數據分析(數據的增減變化)。 |
| 燭形圖 | 一種用于金融市場分析的圖表,通過蠟燭狀的圖形展示數據的開盤價、收盤價、最高價和最低價。 | 蠟燭圖表示數據的開盤價、收盤價、最高價和最低價,顏色區分上漲和下跌,可添加技術指標(如移動平均線)。 | 直觀展示價格波動,適合金融市場分析,易于識別趨勢和交易信號。 | 對非金融市場數據不太適用,需要一定的金融知識來解讀,圖表較為復雜,初學者可能難以理解。 | 金融市場分析(股票、外匯價格波動),技術分析(識別買賣信號),交易決策支持(確定交易時機)。 |

浙公網安備 33010602011771號