matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等
生活随笔
收集整理的這篇文章主要介紹了
matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
matplotlib繪制圖表,設置刻度標簽、最大最小刻度、字體大小,label位置、刻度軸箭頭等
- 1. 效果圖
- 2. 源碼
- 2.1 僅使用普通軸ax + fontdict 源碼
- 2.2 使用mpl設置全局字體 + ax fontdict源碼
寫這篇博客源于博友的提問,之前涉及到不少自定義坐標軸設置,這篇博客將整合介紹如何使用matplotlib繪制圖表,并設置刻度軸位置、最大最小刻度精度范圍、最大最小刻度、坐標軸交點,標題label等字體大小、是否加粗、字體顏色、字體位置、刻度軸結束增加箭頭等。
1. 效果圖
方法一:使用普通的軸ax + fontdict設置字體、字體大小、是否加粗、字體顏色,以及設置軸的最小刻度精度,結束增加箭頭等,效果圖如下:
- 設置字體,支持中文
- 設置字體,是否加粗,字體大小,字體顏色
- 設置xlabel、ylabel字體大小及位置(xlabel可居左、中、右,ylabel可頂部、居中、底部)
- 設置坐標軸的軸線交點(0,0)或者自己可配置
- 設置x軸、y軸軸線位置
- 設置x軸、y軸刻度精度最大、最小范圍
- 設置x軸、y軸刻度軸范圍
- 設置坐標軸結束增加箭頭
方法二:使用全局mpl設置字體,效果圖如下:
- 設置字體,支持中文
- 設置xlabel、ylabel字體大小及位置(xlabel可居左、中、右,ylabel可頂部、居中、底部)
- 設置x軸、y軸原點
- 設置x軸、y軸位置
- 設置x軸、y軸刻度精度最大、最小范圍
- 設置x軸、y軸刻度軸范圍
- 設置坐標軸結束增加箭頭
2. 源碼
2.1 僅使用普通軸ax + fontdict 源碼
# matplotlib繪制象限圖
# 設置坐標軸的軸線交點(0,0)或者自己可配置,
# 坐標軸結束增加箭頭
# 繪制散點圖
# 繪制文字
# 繪制x,y軸標簽位置
# 設置字體,支持中文
# 設置字體,是否加粗,字體大小,字體顏色
# 設置xlabel、ylabel字體大小及位置(xlabel可居左、中、右,ylabel可頂部、居中、底部)
# 設置x軸、y軸原點
# 設置x軸、y軸軸線位置
# 設置x軸、y軸刻度精度最大、最小范圍
# 設置x軸、y軸刻度軸范圍
# 直接可視化或者保存圖片import pandas as pd
from matplotlib import ticker
from pylab import *print(matplotlib.get_backend())# 設置此行,才可以進行圖片保存, 此行與plt.show()互相沖突
# matplotlib.use('Agg')# 設置展示的刻度
# 設置刻度軸位置
# 刻度起始值、結束值、刻度最小精度、刻度間隔
# 文字位置
def setupx(ax, title, minx, maxx, major, minor, position="bottom"):# 定義刻度最大最小精度ax.xaxis.set_major_locator(ticker.MultipleLocator(major))ax.xaxis.set_minor_locator(ticker.MultipleLocator(minor)) # 最小刻度精度# 定義刻度位置ax.xaxis.set_ticks_position(position)ax.set_xlim(minx, maxx)ax.text(-0.5, -0.3, title, transform=ax.transAxes,fontsize=9, fontname='Monospace', color='black')def setupy(ax, title, minx, maxx, major, minor, position="left"):# 定義刻度最大最小精度ax.yaxis.set_major_locator(ticker.MultipleLocator(major))ax.yaxis.set_minor_locator(ticker.MultipleLocator(minor)) # 最小刻度精度# 定義刻度位置ax.yaxis.set_ticks_position(position)ax.set_ylim(minx, maxx)# 繪制教科書中的圖,軸線繪制在(x0,y0)
fig, ax = plt.subplots()x0 = 1945
y0 = 0
# 轉移左和底部線到(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)zbx = np.random.randint(1945, high=2028, size=(12,)).tolist()
sly = np.random.randint(0, high=260, size=(12,)).tolist()data = pd.DataFrame({"zone": ['無錫市', '常州市 ', '鎮江市', ' 徐州市', '連云港市', ' 揚州市', ' 鹽城市', '淮安市', '南通市 ', ' 泰州市 ', ' 宿遷市 ', ' 南京市'],"占比": zbx,"數量": sly})# 為后續繪制散點圖做準備(計算最大,最小x,y軸的值)
minx = min(data["占比"] - 1)
maxx = max(data["占比"] + 1)
miny = min(data["數量"] - 1)
maxy = max(data["數量"] + 1)
minx = 1945
maxx = 2028
miny = 0
maxy = 260# xaxix:position 可設置: 'top', 'bottom', 'both', 'default', 'none'
setupx(ax, title="", position="bottom", minx=minx, maxx=maxx, major=10, minor=2)
# yaxix:position 可設置:'left', 'right', 'both', 'default', 'none'
setupy(ax, title="", position="left", minx=miny, maxx=maxy, major=40, minor=10)# 在坐標軸的末端繪制黑色三角箭頭( ">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}# loc xlabel可設置 'left', 'center', 'right'
plt.xlabel("占比", loc="right", fontdict={'color': 'black','weight': 'bold','size': 20}) # 設置x軸的文字標簽
# ylabel loc可設置:'bottom', 'center', 'top'
plt.ylabel('數量', loc="center", 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'
# 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.title('所有學者每年mesh變化',fontdict={'color': 'red','weight': 'bold','size': 14})
plt.show()# 保存圖片,注意得設置matplotlib.use('Agg'),否則保存的圖為空白
# plt.savefig('maps/xxt.jpg')
2.2 使用mpl設置全局字體 + ax fontdict源碼
# matplotlib繪制象限圖
# 設置坐標軸的軸線交點(0,0)或者自己可配置,
# 坐標軸結束增加箭頭
# 繪制散點圖
# 繪制文字
# 繪制x,y軸標簽位置
# 直接可視化或者保存圖片import pandas as pd
from matplotlib import ticker
from pylab import *print(matplotlib.get_backend())
# 設置此行,才可以進行圖片保存, 此行與plt.show()互相沖突
# matplotlib.use('Agg')# 設置展示的刻度
# 設置刻度軸位置
# 刻度起始值、結束值、刻度最小精度、刻度間隔
# 文字位置
def setupx(ax, title, minx, maxx, major, minor, position="bottom"):# 只顯示底部脊椎# ax.yaxis.set_major_locator(ticker.NullLocator())# ax.spines['right'].set_color('none')# ax.spines['left'].set_color('none')# if (position == "bottom"):# ax.spines['top'].set_color('none')# elif (position == "top"):# ax.spines['bottom'].set_color('none')# 定義刻度最大最小精度ax.xaxis.set_major_locator(ticker.MultipleLocator(major))ax.xaxis.set_minor_locator(ticker.MultipleLocator(minor)) # 最小刻度精度# 定義刻度位置ax.xaxis.set_ticks_position(position)ax.set_xlim(minx, maxx)ax.text(-0.5, -0.3, title, transform=ax.transAxes,fontsize=9, fontname='Monospace', color='black')def setupy(ax, title, minx, maxx, major, minor, position="left"):# 定義刻度最大最小精度ax.yaxis.set_major_locator(ticker.MultipleLocator(major))ax.yaxis.set_minor_locator(ticker.MultipleLocator(minor)) # 最小刻度精度# 定義刻度位置ax.yaxis.set_ticks_position(position)ax.set_ylim(minx, maxx)# ax.text(0.5, 0.3, title, transform=ax.transAxes,# fontsize=9, fontname='Monospace', color='black')# 繪制教科書中的圖,軸線繪制在(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["占比"] - 1)
maxx = max(data["占比"] + 1)
miny = min(data["數量"] - 1)
maxy = max(data["數量"] + 1)# xaxix:position 可設置: 'top', 'bottom', 'both', 'default', 'none'
setupx(ax, title="", position="bottom", minx=minx, maxx=maxx, major=10, minor=2)
# yaxix:position 可設置:'left', 'right', 'both', 'default', 'none'
setupy(ax, title="", position="left",minx=miny, maxx=maxy, major=40, minor=10)# 在坐標軸的末端繪制黑色三角箭頭( ">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}# loc xlabel可設置 'left', 'center', 'right'
plt.xlabel("占比", loc="center", fontdict={'color': 'black','weight': 'bold','size': 20}) # 設置x軸的文字標簽
# ylabel loc可設置:'bottom', 'center', 'top'
plt.ylabel('數量', loc="center", 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'
# 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')
總結
以上是生活随笔為你收集整理的matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 举字开头的成语大全
- 下一篇: 求一个qq网名带情字的