有時(shí)候?yàn)榱酥庇^展現(xiàn)圖的信息,可以在大圖中添加小子圖的方式進(jìn)行數(shù)據(jù)分析,如下圖所示:
具體的代碼如下:該圖連接了數(shù)據(jù)庫(kù),當(dāng)然重要的不是數(shù)據(jù)展示,而是添加子圖的方法。
import matplotlib.pyplot as plt
import MySQLdb as mdb
import numpy as np
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
def graph():
# 連接數(shù)據(jù)庫(kù)
conn = mdb.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='alibaba_trace', charset='utf8')
# 如果使用事務(wù)引擎,可以設(shè)置自動(dòng)提交事務(wù),或者在每次操作完成后手動(dòng)提交事務(wù)conn.commit()
conn.autocommit(1) # conn.autocommit(True)
# 使用cursor()方法獲取操作游標(biāo)
cursor = conn.cursor()
# 因該模塊底層其實(shí)是調(diào)用CAPI的,所以,需要先得到當(dāng)前指向數(shù)據(jù)庫(kù)的指針。
try:
cursor.execute("select machineID, count(id) from batch_instance where machineID != 0 group by machineID")
records = cursor.fetchall()
list_records = list(records)
except:
import traceback
traceback.print_exc()
# 發(fā)生錯(cuò)誤時(shí)回滾
conn.rollback()
finally:
# 關(guān)閉游標(biāo)連接
cursor.close()
# 關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close()
res = []
res[:] = map(list, list_records)
machineID = [x[0] for x in res]
instance_num = [x[1] for x in res]
print(max(instance_num))
print(min(instance_num))
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
# # cdf
# hist, bin_edges = np.histogram(instance_num, bins=len(np.unique(instance_num)))
# cdf = np.cumsum(hist / sum(hist))
# ax1.plot(bin_edges[1:], cdf, color='red', ls='-')
# ax1.set_xlabel("instance number per machine")
# ax1.set_ylabel("portion of machine")
# plt.savefig('../../imgs_mysql/cdf_of_machine_instance.png')
# # 直方圖
ax1.hist(instance_num, normed=False, alpha=1.0, bins=100)
ax1.set_xlabel('instance number per machine')
ax1.set_ylabel('machine number')
# cdf 要添加的子圖
axins = inset_axes(ax1, width=1.5, height=1.5, loc='upper left')
# ax1 大圖
# width height分別為子圖的寬和高
# loc 為子圖在大圖ax1中的相對(duì)位置 相應(yīng)的值有
# upper left
# lower left
# lower right
# right
# center left
# center right
# lower center
# upper center
# center
hist, bin_edges = np.histogram(instance_num, bins=len(np.unique(instance_num)))
cdf = np.cumsum(hist / sum(hist))
axins.plot(bin_edges[1:], cdf, color='red', ls='-')
axins.set_yticks([])
# axins.set_xlabel("instance number per machine")
# axins.set_ylabel("portion of machine")
plt.savefig("../../imgs_mysql/hist_of_machine_instance")
plt.show()
if __name__ == '__main__':
graph()
以上這篇python 實(shí)現(xiàn)在一張圖中繪制一個(gè)小的子圖方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

