最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中可視化折線圖的四種創(chuàng)意方法

 更新時間:2026年01月26日 09:44:55   作者:databook  
這篇文章主要為大家詳細(xì)介紹了Python中四種特別的折線圖變體,它們各有所長,能讓你的數(shù)據(jù)故事更加生動,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

想象一下折線圖就像一條普通的公路,它能帶我們從A點(diǎn)到達(dá)B點(diǎn)。

但有時我們需要更特別的路線:環(huán)島、盤山公路波浪形賽道螺旋上升的通道。

在數(shù)據(jù)可視化中,標(biāo)準(zhǔn)的折線圖有時無法充分展示數(shù)據(jù)的特性,這時我們就需要一些創(chuàng)意變種。

今天將介紹四種特別的折線圖變體,它們各有所長,能讓你的數(shù)據(jù)故事更加生動。

1. 圓形折線圖:時間的輪回

如果把普通的折線圖首尾相連,放在圓形坐標(biāo)系中,就得到了圓形折線圖。

它特別適合展示周期性數(shù)據(jù),比如一天24小時的溫度變化、一周七天的銷售數(shù)據(jù),或者一年四季的氣候模式。

它的實(shí)現(xiàn)原理是:使用極坐標(biāo)系統(tǒng),將角度代表時間或類別,半徑代表數(shù)值大小。

matplotlib中,只需要創(chuàng)建一個極坐標(biāo)子圖,然后像普通折線圖一樣繪制即可。

# 圓形折線圖
# 數(shù)據(jù)準(zhǔn)備
hours = np.linspace(0, 2 * np.pi, 24, endpoint=False)
values = [] # ....
# 閉合數(shù)據(jù)
values_cycle = np.concatenate((values, [values[0]]))
hours_cycle = np.concatenate((hours, [hours[0]]))
hour_labels = [f"{h}點(diǎn)" for h in range(24)]

fig = plt.figure(figsize=(14, 6))

# --- 左圖:普通折線圖 ---
ax1 = fig.add_subplot(121)
ax1.plot(range(24), values, marker="o", color="#FF6B6B")
# 省略...

# --- 右圖:圓形折線圖 ---
ax2 = fig.add_subplot(122, projection="polar")
ax2.plot(hours_cycle, values_cycle, linewidth=2, color="#FF6B6B")
# 省略...

plt.show()

圓形折線圖在這種場景下的優(yōu)勢在于 周期性的閉環(huán)感。

  • 左圖(普通): 像把這一天的時間切斷了,23:00 和 00:00 分隔在兩端,看不出它們其實(shí)緊挨著。
  • 右圖(圓形): 完美閉合。你能直觀地感受到“深夜”是一個連續(xù)的時間段。

2. 斜率圖:變化的快照

想象一下比較兩個人從起點(diǎn)到終點(diǎn)的跑步速度。

斜率圖就像兩張快照:一張?jiān)谄瘘c(diǎn),一張?jiān)诮K點(diǎn),中間用直線連接。

線的斜率代表了變化的速率,陡峭的上坡表示大幅增長,平緩的線表示變化不大,下坡則表示下降。

它的實(shí)現(xiàn)原理:通常在兩側(cè)顯示兩個時間點(diǎn)或兩種狀態(tài)的數(shù)據(jù),然后用直線連接對應(yīng)的數(shù)據(jù)點(diǎn)。

線的斜率直觀展示了變化的大小和方向

# 斜率圖
# 數(shù)據(jù)
depts = ['銷售部', '人事部', '技術(shù)部', '研發(fā)部', '市場部']
score_before = [65, 70, 88, 85, 60]
score_after = [85, 68, 92, 80, 90]

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

# --- 左圖:普通折線圖 ---
x = [1, 2] # 代表前后兩個時間點(diǎn)
for i in range(len(depts)):
    ax1.plot(x, [score_before[i], score_after[i]], marker='o', label=depts[i])
# 省略 ...

# --- 右圖:斜率圖 ---
for i in range(len(depts)):
    color = 'green' if score_after[i] > score_before[i] else 'red'
    # 繪制線條
    ax2.plot([0, 1], [score_before[i], score_after[i]], color=color, marker='o', linewidth=2)
    # 直接在點(diǎn)旁邊標(biāo)注文字,去除圖例查找的負(fù)擔(dān)
    ax2.text(-0.05, score_before[i], f"{depts[i]} {score_before[i]}", ha='right', va='center')
    ax2.text(1.05, score_after[i], f"{score_after[i]}", ha='left', va='center')

# 省略 ...

plt.tight_layout()
plt.show()

斜率圖在這種場景下的優(yōu)勢在于 極簡的變化趨勢。

  • 左圖(普通): 雖然也能看,但在坐標(biāo)軸的干擾下,你需要盯著讀數(shù)看。
  • 右圖(斜率): 去掉了多余的刻度線,只保留首尾。線條越陡峭,代表變化越劇烈。這就像是從“閱讀說明書”變成了“看紅綠燈”,一目了然。

3. 凹凸圖:排名的舞蹈

想象一下賽跑中的名次變化:起跑時A領(lǐng)先,中途B反超,最后C沖刺奪冠。

凹凸圖就像記錄這場比賽的名次變化表,每個時間點(diǎn)誰在前誰在后一目了然。

它的實(shí)現(xiàn)原理:通常展示多個項(xiàng)目在不同時間點(diǎn)的排名變化。

每個項(xiàng)目有一條線,線的上下位置代表排名高低。由于排名是相對的,所以這些線總會交叉,形成有趣的波浪形。

# 凹凸圖
years = [2019, 2020, 2021, 2022, 2023]
# 排名數(shù)據(jù)
ranks = {
    '品牌A': [1, 1, 2, 3, 4],
    '品牌B': [4, 3, 1, 1, 2],
    '品牌C': [2, 4, 3, 2, 1],
    '品牌D': [3, 2, 4, 4, 3]
}
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

# --- 左圖:普通折線圖 (模擬數(shù)值非常接近的情況) ---
# 假設(shè)排名對應(yīng)的數(shù)值很接近,很難看清
values_simulated = {
    '品牌A': [30, 31, 25, 20, 15],
    '品牌B': [10, 15, 30, 32, 28],
    '品牌C': [25, 12, 22, 28, 35],
    '品牌D': [20, 22, 18, 15, 20]
}

for brand, val_list in values_simulated.items():
    ax1.plot(years, val_list, marker='o', label=brand)

# 省略 ...

# --- 右圖:凹凸圖 ---
for idx, (brand, rank_list) in enumerate(ranks.items()):
    ax2.plot(years, rank_list, marker='o', markersize=15, linewidth=4, label=brand, color=colors[idx])
    # 在圓點(diǎn)中寫上名次
    for x, y in zip(years, rank_list):
        ax2.text(x, y, str(y), color='white', ha='center', va='center', fontweight='bold')

ax2.invert_yaxis() # 關(guān)鍵:倒轉(zhuǎn)Y軸,讓第1名在最上面
# 省略 ...

plt.tight_layout()
plt.show()

凹凸圖在這種場景下的優(yōu)勢在于 排名的更替。

  • 左圖(普通): 我們通常畫的是“數(shù)值”。如果四個品牌的市場份額很接近(比如20%和21%),線條會粘連在一起,很難看清誰第一誰第二。
  • 右圖(凹凸): Y軸不再是數(shù)值,而是“名次”。這里將排名均勻拉開,你可以清晰地看到品牌C是如何像黑馬一樣從最后一名殺到第一名的。

4. 周期圖:模式的放大鏡

想象一下觀察一年的溫度變化。

普通折線圖會顯示一條有365個點(diǎn)的波浪線,周期圖則把這365天分成12個月,把每個月的31天疊加在一起比較,就像把一年的溫度曲線切成12段,然后并排放在一起。

它的實(shí)現(xiàn)原理:將時間序列數(shù)據(jù)按照周期(天、周、月、年等)切分,然后將每個周期重疊繪制。

這樣可以直觀比較不同周期內(nèi)的模式是否相似,以及每個周期相對于整體的表現(xiàn)。

# 周期圖
months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
# 模擬長數(shù)據(jù)
sales_2021 = [20, 25, 35, 50, 80, 100, 110, 105, 70, 50, 30, 25]
sales_2022 = [22, 28, 40, 55, 85, 105, 115, 100, 75, 55, 35, 28]
sales_2023 = [25, 30, 45, 60, 95, 120, 130, 115, 80, 60, 40, 35]

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

# --- 左圖:普通折線圖 (線性時間軸) ---
# 把所有數(shù)據(jù)拼成一條長線
all_sales = sales_2021 + sales_2022 + sales_2023
all_months_idx = range(len(all_sales))

ax1.plot(all_months_idx, all_sales, color='#3498db', linewidth=2)
# 省略 ...

# --- 右圖:周期圖 (疊加時間軸) ---
ax2.plot(months, sales_2021, marker='.', label='2021年', color='lightgrey', linewidth=2, linestyle='--')
ax2.plot(months, sales_2022, marker='.', label='2022年', color='grey', linewidth=2, linestyle='--')
ax2.plot(months, sales_2023, marker='o', label='2023年', color='#3498db', linewidth=3)
# 省略 ...

plt.tight_layout()
plt.show()

周期圖在這種場景下的優(yōu)勢在于 季節(jié)性模式的識別。

  • 左圖(普通): 一條長線連綿不斷。想要對比2021年7月和2023年7月的數(shù)據(jù),眼睛需要在圖表左右兩端來回橫跳,非常累。
  • 右圖(周期): 就像把每年的數(shù)據(jù)“疊”在了一起。你可以直接看到,無論哪一年,7月都是最高峰,而12月都是低谷。規(guī)律一目了然。

5. 總結(jié)

每種折線圖變體都有其獨(dú)特的價值:

  • 圓形折線圖:適合展示周期性數(shù)據(jù),首尾相接的設(shè)計(jì)強(qiáng)調(diào)循環(huán)
  • 斜率圖:適合比較兩個時間點(diǎn)的變化,直觀展示變化幅度
  • 凹凸圖:適合展示排名或相對位置的變化,競爭關(guān)系一目了然
  • 周期圖:適合比較多個周期的模式,發(fā)現(xiàn)季節(jié)性規(guī)律

實(shí)際情況下,選擇哪種變體取決于你的數(shù)據(jù)特點(diǎn)和想要傳達(dá)的信息。

關(guān)鍵是要記?。嚎梢暬皇菫榱遂偶?,而是為了更好地講述數(shù)據(jù)故事。下次當(dāng)我們面對數(shù)據(jù)時,不妨思考一下,哪種"變形"的折線圖能讓你的故事更加動人。

到此這篇關(guān)于Python中可視化折線圖的四種創(chuàng)意方法的文章就介紹到這了,更多相關(guān)Python折線圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python lambda匿名函數(shù)深入講解

    Python lambda匿名函數(shù)深入講解

    lambda所表示的匿名函數(shù)的內(nèi)容應(yīng)該是很簡單的,如果復(fù)雜的話,干脆就重新定義一個函數(shù)了,使用lambda就有點(diǎn)過于執(zhí)拗了。lambda就是用來定義一個匿名函數(shù)的,如果還要給他綁定一個名字的話,就會顯得有點(diǎn)畫蛇添足,通常是直接使用lambda函數(shù)
    2023-01-01
  • 僅用500行Python代碼實(shí)現(xiàn)一個英文解析器的教程

    僅用500行Python代碼實(shí)現(xiàn)一個英文解析器的教程

    這篇文章主要介紹了僅用500行Python代碼實(shí)現(xiàn)一個英文解析器的教程,自然語言處理近來也是業(yè)界中一個熱門課題,作者為NLP方向的開發(fā)者,需要的朋友可以參考下
    2015-04-04
  • 詳解Python核心對象類型字符串

    詳解Python核心對象類型字符串

    本篇文章通過理論知識點(diǎn)給大家講述了Python核心對象類型字符串的相關(guān)知識內(nèi)容,對此有興趣的一起學(xué)習(xí)下。
    2018-02-02
  • python入門之語言基礎(chǔ)

    python入門之語言基礎(chǔ)

    這篇文章主要介紹了Python入門之基礎(chǔ)語法詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很大的幫助喲,需要的朋友可以參考下
    2021-10-10
  • Python?sklearn預(yù)測評估指標(biāo)混淆矩陣計(jì)算示例詳解

    Python?sklearn預(yù)測評估指標(biāo)混淆矩陣計(jì)算示例詳解

    這篇文章主要為大家介紹了Python?sklearn預(yù)測評估指標(biāo)混淆矩陣計(jì)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 基于PyQt5制作一個猜數(shù)字小游戲

    基于PyQt5制作一個猜數(shù)字小游戲

    這篇文章主要為大家介紹了如何用Python中的PyQt5模塊制作一個帶GUI的猜數(shù)字小游戲,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-03-03
  • python打包成 .so的實(shí)現(xiàn)步驟

    python打包成 .so的實(shí)現(xiàn)步驟

    當(dāng)需要將產(chǎn)品發(fā)布到外部環(huán)境的時候,源碼的保護(hù)尤為重要,因此需要將python文件打成so文件的目的就是為了保護(hù)源碼,本文主要介紹了python打包成.so的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2023-12-12
  • Python 類型注解核心用法指南

    Python 類型注解核心用法指南

    本文主要介紹了Python中的類型注解功能,它可以幫助提高代碼的可讀性與維護(hù)性,類型注解可以應(yīng)用于變量、函數(shù)和類,分別提供類型提示而不會強(qiáng)制類型校驗(yàn),文章同時也介紹了不同類型注解的用法及存儲機(jī)制,并強(qiáng)調(diào)了使用注解時需要注意的一些事項(xiàng)
    2026-05-05
  • 基于Python實(shí)現(xiàn)繪制一個足球

    基于Python實(shí)現(xiàn)繪制一個足球

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)繪制一個簡單的足球,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的可以嘗試一下
    2023-02-02
  • Python格式化輸出詳情

    Python格式化輸出詳情

    這篇文章介紹了Python格式化輸出,主要講解Python格式化輸出的三種方式:%格式化、format格式化、f-String格式化,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09

最新評論

青神县| 洪洞县| 钦州市| 锡林郭勒盟| 宁国市| 宽甸| 清丰县| 永宁县| 青浦区| 遂昌县| 巨野县| 嘉鱼县| 桓台县| 安丘市| 连云港市| 来宾市| 宁津县| 淮北市| 依安县| 兰州市| 松滋市| 安庆市| 瑞丽市| 邵阳市| 囊谦县| 莒南县| 达州市| 平山县| 中山市| 富蕴县| 桑日县| 来安县| 博爱县| 尼木县| 穆棱市| 高青县| 鄱阳县| 梓潼县| 彩票| 宁波市| 安图县|