Matplotlib绘制象限图——支持中文、箭头、自定义轴线交点
生活随笔
收集整理的這篇文章主要介紹了
Matplotlib绘制象限图——支持中文、箭头、自定义轴线交点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Matplotlib繪制象限圖——支持中文、箭頭、自定義軸線交點
- 1. 效果圖
- 2. 原理
- 2.1 繪制象限圖步驟
- 2.1 添加文字到圖表
- 3. 源碼
- 參考
這篇博客將介紹如何使用matplotlib繪制象限圖,寫這篇博客源于博友的提問。
首先pyechart貌似不支持繪制象限圖。pyecharts支持的象形柱圖demo與想要的效果相差很大。
選擇了Matplotlib進行繪制。
1. 效果圖
2. 原理
2.1 繪制象限圖步驟
- 設置設置坐標軸的軸線交點(0,0)或者自己可配置,
- 坐標軸結束增加箭頭
- 繪制散點圖
- 繪制文字
- 繪制x,y軸標簽位置
- 直接可視化或者保存圖片
2.1 添加文字到圖表
繪制文本到圖表
plt.text(x=x0, y=maxy+3, s=‘數量’, ha=‘left’, va=‘baseline’, fontdict=fontdict) # y軸文字標簽顯示橫的
- x:文本x軸坐標,可通過鼠標在圖上定位獲得合適的值,再生成最佳的圖
- y:文本y軸坐標
- s:文本內容為‘數量’
- ha:設置字體的水平位置,可選’center’, ‘right’, ‘left’
- va:設置字體的垂直位置,可選’center’, ‘top’, ‘bottom’, ‘baseline’, ‘center_baseline’
- fontdict: 對字體屬性進行個性化設置
size:設置字號
family:設置字體類型,可選’serif’, ‘sans-serif’, ‘cursive’, ‘fantasy’, ‘monospace’
weight:設置字體磅值,可選’light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’
3. 源碼
# 繪制象限圖
# 設置坐標軸的軸線交點(0,0)或者自己可配置,
# 坐標軸結束增加箭頭
# 繪制散點圖
# 繪制文字(支持中文)
# 繪制x,y軸標簽位置
# 直接可視化或者保存圖片import pandas as pd
from pylab import *print(matplotlib.get_backend())
# 設置此行,才可以進行圖片保存, 此行與plt.show()互相沖突
# matplotlib.use('Agg')# 繪制教科書中的圖,軸線繪制在(x0,y0)
fig, ax = plt.subplots()x0 = 50
y0 = 200
# 轉移左和底部線到(x0,y0)的相對位置
ax.spines["left"].set_position(("data", x0))
ax.spines["bottom"].set_position(("data", y0))# 隱藏頂部和右邊的脊柱線
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)data = pd.DataFrame({"zone": ['無錫市', '常州市 ', '鎮江市', ' 徐州市', '連云港市', ' 揚州市', ' 鹽城市', '淮安市', '南通市 ', ' 泰州市 ', ' 宿遷市 ', ' 南京市'],"占比": [63.22, 75.25, 97.18, 23.97, 51.81, 80.93, 80.12, 67.41, 45.81, 31.75, 99, 76.9],"數量": [400, 403, 116, 318, 450, 361, 165, 408, 208, 208, 436, 344]})# 為后續繪制散點圖做準備(計算最大,最小x,y軸的值)
minx = min(data["占比"])
maxx = max(data["占比"])
miny = min(data["數量"])
maxy = max(data["數量"])# 在坐標軸的末端繪制黑色三角箭頭( ">k"/"^k")
# 禁用剪輯(clip_on=False)放置從軸上溢出
ax.plot(1, y0, ">k", transform=ax.get_yaxis_transform(), clip_on=False)
ax.plot(x0, 1, "^k", transform=ax.get_xaxis_transform(), clip_on=False)mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False# 繪制散點圖上去
ax.scatter(data["占比"], data["數量"], color="green", marker='o', alpha=0.6) # 綠色圓形,透明度0.6\# 顏色、是否加粗,字體大小,字體采取默認
fontdict = {'color': 'black','weight': 'bold','size': 12}
plt.xlabel("占比", loc="right", fontdict=fontdict) # 設置x軸的文字標簽
plt.ylabel('數量', loc="top", fontdict=fontdict) # 設置y軸的文字標簽# 添加文字到圖表
# - x:文本x軸坐標,可通過鼠標在圖上定位獲得合適的值,再生成最佳的圖
# - y:文本y軸坐標
# - s:文本內容為‘數量’
# - ha:設置字體的水平位置,可選'center', 'right', 'left'
# - va:設置字體的垂直位置,可選'center', 'top', 'bottom', 'baseline', 'center_baseline'
# - fontdict: 對字體屬性進行個性化設置
# size:設置字號[添加鏈接描述](https://blog.csdn.net/two_snails/article/details/106762783)
# family:設置字體類型,可選'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'
# weight:設置字體磅值,可選'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'
# plt.text(x=x0, y=maxy+3, s='數量', ha='left', va='baseline', fontdict=fontdict) # y軸文字標簽顯示橫的# 給每個點添加zone標簽
for x, y, zone in zip(data["占比"], data["數量"], data["zone"]): # zip函數將x,y,zone數據一一對應,配對組合plt.text(x, y + 5, '%s' % zone, ha='center', va='bottom', fontdict={'color': 'blue','weight': 'normal','size': 8})
plt.show()# 保存圖片,注意得設置matplotlib.use('Agg'),否則保存的圖為空白
# plt.savefig('maps/xxt.jpg')
參考
- https://blog.csdn.net/two_snails/article/details/106762783
總結
以上是生活随笔為你收集整理的Matplotlib绘制象限图——支持中文、箭头、自定义轴线交点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows安装用于OCR的Tesse
- 下一篇: 使用KMeanCluster对多个区域进